一、前言
因为之前一直没太接触过项目实现部署的问题,所以中间出现了N多问题,现在有时间了,做了一个整理,已备后用。此处不包括上一层服务器的负载,如使用nginx/apache等。
二、实现
mysql:
1. 最大连接数:
配置项目中的连接池最大连接数 <= mysql的max_connections(如项目有集群,则乘N)
可解决出现:MySQL 提示 Too many connections ( 1040 )
临时解决方案:
最终解决方案:
1)首先修改/etc/my.cnf(Ubuntu 10下为/etc/mysql/my.cnf)
2)在[mysqld]最后增加一行
3)重新启动mysql
2. 序列
非主键的WHERE条件,则可增加序列。
3. 数据类型
相关联的两表中的相同字段长度要一致,mysql取值如果满足可用占用空间小的,如tinyint、smallint等等
tomcat:
catalina.sh 在cygwin=false前面添加
server.xml
linux:
查询ulimit命令
1. 句柄数:ulimit -n
问题: Can’t open so many files
临时解决方案:
最终解决方案,在/etc/security/limits.conf文件中设置最大打开文件数 添加:
最后用重启ulimit -a再次查看,open files的值,如果改过来,则生效。
2. 用户进程数:ulimit -u
比如我们在模拟大规模http并发测试的时候,客户端会报一个无法fork new proc异常,原因是受到了最大进程1024的限制,解除 Linux 系统的最大进程数
解决方案:修改/etc/security/limits.d/90-nproc.conf
3. 网络参数
修改/etc/sysctl.cnf文件,增加如下内容
保存退出,执行sysctl命令,重新加载内核参数立刻生效
已有 0人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐
因为之前一直没太接触过项目实现部署的问题,所以中间出现了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" />
引用
APR配置方式可参考: http://www.linuxidc.com/Linux/2015-09/123076.htm
配置误区对比和解读: http://www.linuxidc.com/Linux/2013-09/90332.htm
配置误区对比和解读: http://www.linuxidc.com/Linux/2013-09/90332.htm
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.cnf文件,增加如下内容
Linux: vim /etc/sysctl.cnf
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
引用
并发测试详解: https://gitsea.com/2013/07/02/tomcat-%E5%B9%B6%E5%8F%91%E4%BC%98%E5%8C%96/
ulimit详解: https://gitsea.com/2013/05/23/linux-ulimit%E8%AF%A6%E8%A7%A3/
ulimit详解: https://gitsea.com/2013/05/23/linux-ulimit%E8%AF%A6%E8%A7%A3/
已有 0人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐