一、前言
因为之前一直没太接触过项目实现部署的问题,所以中间出现了N多问题,现在有时间了,做了一个整理,已备后用。此处不包括上一层服务器的负载,如使用nginx/apache等。
二、实现
mysql:
1. 最大连接数:
配置项目中的连接池最大连接数 <= mysql的max_connections(如项目有集群,则乘N)
可解决出现:MySQL 提示 Too many connections ( 1040 )
SELECT @@max_connections; -- 查看现有设置数量
临时解决方案:
set global max_connections = 3600; -- 重启后失效
最终解决方案:
1)首先修改/etc/my.cnf(Ubuntu 10下为/etc/mysql/my.cnf)
Linux: vi /etc/my.cnf
2)在[mysqld]最后增加一行
max_connections=5000
3)重新启动mysql
Linux: service mysqld start
2. 序列
非主键的WHERE条件,则可增加序列。
3. 数据类型
相关联的两表中的相同字段长度要一致,mysql取值如果满足可用占用空间小的,如tinyint、smallint等等
tomcat:
catalina.sh 在cygwin=false前面添加
JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:PermSize=64M -XX:MaxPermSize=128m"
server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol" // NIO
executor="tomcatThreadPool" // Executor 线程池
compression="on"
compressionMinSize="2048"
maxThreads="30000" //设定处理客户请求的线程的最大数目,决定了服务器可以同时响应客户请求的数,默认200
minSpareThreads="512" //初始化线程数,最小空闲线程数,默认为10
maxSpareThreads="2048"
enableLookups="false" //关闭DNS反向查询,性能高设false
redirectPort="8443"
acceptCount="35000" //当所有可以使用的处理请求的线程数都被使用时,可以被放到处理队列中请求数,请求数超过这个数的请求将不予处理,默认100
debug="0"
connectionTimeout="40000"
disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
引用
linux:
查询ulimit命令
# 显示当前所有的 limit 信息
Linux: ulimit -a
# Linux操作系统对一个进程可以打开最大文件描述符的数量
Linux: ulimit -n
# 用户最大可用的进程数
Linux: ulimit -u
1. 句柄数:ulimit -n
问题: Can’t open so many files
临时解决方案:
ulimit -SHn 65535
最终解决方案,在/etc/security/limits.conf文件中设置最大打开文件数 添加:
Linux: vi /etc/security/limits.conf
# *代表针对所有用户
* soft nofile 65535
* hard nofile 65535
最后用重启ulimit -a再次查看,open files的值,如果改过来,则生效。
2. 用户进程数:ulimit -u
比如我们在模拟大规模http并发测试的时候,客户端会报一个无法fork new proc异常,原因是受到了最大进程1024的限制,解除 Linux 系统的最大进程数
解决方案:修改/etc/security/limits.d/90-nproc.conf
Linux: vim /etc/security/limits.d/90-nproc.conf
# 添加如下的行
* soft nproc 102400
root soft nproc 102400
3. 网络参数
修改/etc/sysctl.conf文件,增加如下内容
Linux: vim /etc/sysctl.conf
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 65536
保存退出,执行sysctl命令,重新加载内核参数立刻生效
Linux: sysctl -p
引用
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为 180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效 果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
http://www.jb51.net/article/37835.htm
引用
分享到:
相关推荐
本资源适用于在linux上安装开发者环境,安装其他版本的开发环境大同小异,本资源可供用于参考。
Linux搭建JAVAEE环境,包含jdk、tomcat、mysql安装 linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上,很...
此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...
我感觉很不错的宝贝,现在和大家分享,希望能够帮到大家,如果你需要可以下载看看,很适合喜欢研究技术的人员
Linux 操作系统开发手册 Linux 是一款免费、开源的操作系统,其安全、高效、稳定,处理高并发非常强悍,现在很多的企业级的项目都会部署到Linux/unix服务器运行。...14、Linux上安装JDK、Tomcat、Eclipse、MySQL
3.1. 1 构建NTP时间服务器 25 3.1. 2 构建DHCP服务器 27 3.1. 3 搭建Samba服务器 29 ...6. Linux下高并发系统内核优化 122 7. Nginx负载均衡机制及常见问题 124 8. Linux运维职业规划 127 9. Linux运维面试总结 127
搭建高性能大并发大型网站架构 教程.zip 1.服务器操作系统用64位的CentOS 2.mysql数据库 3.nosql redis缓存 4.web网站代码 5.nginx 6.apache php 7.tomcat java 8.squid前台静态资源缓存 9.CDN服务器 10.固态硬盘+...
此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...
此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...
重磅推荐,史上最全的Java面试文档总结(jvm,mybatis,mysql优化算法)等总结文档大合集,共300份。 ActiveMQ消息中间件面试专题 Dubbo面试及答案(上) Dubbo面试专题及答案(下) Java并发体系知识导图笔记.xmind ...
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...
1、启动前 请配置application.properties中相关redis、zk以及kafka相关地址,建议在Linux下安装使用。 2、数据库脚本位于 src/main/resource/sql 下面,启动前请自行导入。 3、配置完成,运行Application中的main...
Web大并发集群部署 Web服务器-Apache Web服务器-Nginx Web服务器-Tomcat 部署高可用集群 构建可视化数据分析系统-ELK 计算机网络基础 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM
Web大并发集群部署 Web服务器-Apache Web服务器-Nginx Web服务器-Tomcat 部署高可用集群 构建可视化数据分析系统-ELK 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM
此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...
并发编程面试(下).pdf 并发编程(上).pdf zookeeper面试.pdf Tomcat面试.pdf SQL优化面试.pdf Spring面试.pdf SpringMVC面试.pdf SpringCloud面试.pdf SpringBoot面试.pdf Redis面试(下).pdf redis面试(上)....
2021面试题、Java2021面试题、2022面试题、Java2022面试题、Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、Spring面试题、MyBatis面试题、ZooKeepe面试题r、Dubbo面试题、Elasticsearch面试题、...
Web大并发集群部署 Web服务器-Apache Web服务器-Nginx Web服务器-Tomcat 部署高可用集群 构建可视化数据分析系统-ELK 计算机网络基础 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM
Java基础-Java容器-并发编程-SSM框架-JVM-MySQL-Tomcat-Linux-Redis等等等 (๑•̀ㅂ•́)و✧
【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..