linux下用ulimit设置连接数最大值,默认是1024,在高负载下要设置为更高。
ulimit只能做临时修改,重启后失效。
ulimit -HSn 65535
ulimit -a/n/H/S 都有什么含义?
ulimit -a 显示当前所有的资源限制
ulimit -H 设置硬件资源限制
ulimit -S 设置软件资源限制
ulimit -n 设置进程最大打开文件描述符数
ulimit -u <程序数目> 用户最多可开启的程序数目
总结
- 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
- 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
- nofile的soft limit不能超过其hard limit
- nofile的hard limit不能超过/proc/sys/fs/nr_open
这个文件句柄限制怎么设置了/etc/security/limits.conf 对进程都无效呢?
在修改/etc/security/limits.conf 以及使用 ulimit -n命令进行修改文件句柄数量时,是需要重新进入终端方可生效。
服务器都重启了一遍了,就是不生效!
百度,谷歌查找资料,据说还要修改 /etc/security/limits.d/20-nproc.conf < /etc/security/limits.conf 限制实际取决于 /etc/security/limits.d/20-nproc.conf的配置。
也就是说哪怕/etc/security/limits.conf设置最大打开数是65535,而/etc/security/limits.d/20-nproc.conf里配的是4096,那最终结果还是用户最大只能打开4096个文件句柄,于是赶紧看了下/etc/security/limits.d/20-nproc.conf配置,果然是4096。
最后有一个好的发现,说这个限制是在进程里面限制的,于是找了个httpd.service的启动脚本进程进行修改,如下:
但是要是我有100个进程,总不能修改100次吧,系统没这么傻逼吧,于是想到Centos7 系统是采用Systemd进行管理服务的,是否会和这个有所关系呢?
在C7系统,进程改用了systemd代替之前SysV进行服务管理,原先的/etc/security/limits.conf文件配置的作用域缩小,只适用于通过PAM认证登录用户的资源显示,对systemd的service资源限制不生效的。
在C7里面,要进行全局的配置进程打开文件数量,需要修改/etc/systemd/system.conf 和 /etc/systemd/user.conf 这两个,当然,如果只是进程修改system.conf即可,里面有两个默认值调整一下:
CentOS7 版本,是先读/etc/security/limits.conf,如果/etc/security/limits.d/目录下还有配置文件的话,会遍历读取里面文件,所以/etc/security/limits.d/里面的文件里面的配置会覆盖/etc/security/limits.conf的配置。
在服务器硬件资源有限的情况下,最大的利用服务器资源,提高服务器的并发处理能力,是很多运维技术人员思考的问题。
要提高Linux系统下的负载能力,我们需要选择可以承载更高并发的web服务器,例如nginx这种天生的并发悍将,如果是执意使用apache,那么也应该在worker模式下工作。
除此之外,对于系统内核的调优必不可少,但是最能解决服务器负载问题的方法就是配置的提升,既稳定,又有效的方法。
#注释原有的nofile行
sed -i "/nofile/s/^/#/g" /etc/security/limits.conf
#注释原有的nproc行
sed -i "/nproc/s/^/#/g" /etc/security/limits.conf
echo "* soft nofile 1048576" >>/etc/security/limits.conf
echo "* hard nofile 1048576" >>/etc/security/limits.conf
echo "root soft nofile 1048576" >>/etc/security/limits.conf
echo "root hard nofile 1048576" >>/etc/security/limits.conf
echo "* soft nproc 65535" >>/etc/security/limits.conf
echo "* hard nproc 65535" >>/etc/security/limits.conf
echo "root soft nproc unlimited" >>/etc/security/limits.conf
echo "root hard nproc unlimited" >>/etc/security/limits.conf
#注释原有的nproc行
sed -i "/nproc/s/^/#/g" /etc/security/limits.d/90-nproc.conf
#注释原有的nofile行
sed -i "/nofile/s/^/#/g" /etc/security/limits.d/90-nproc.conf
echo "* soft nofile 1048576" >>/etc/security/limits.d/90-nproc.conf
echo "* hard nofile 1048576" >>/etc/security/limits.d/90-nproc.conf
echo "root soft nofile 1048576" >>/etc/security/limits.d/90-nproc.conf
echo "root hard nofile 1048576" >>/etc/security/limits.d/90-nproc.conf
echo "* soft nproc 65535" >>/etc/security/limits.d/90-nproc.conf
echo "* hard nproc 65535" >>/etc/security/limits.d/90-nproc.conf
echo "root soft nproc unlimited" >>/etc/security/limits.d/90-nproc.conf
echo "root hard nproc unlimited" >>/etc/security/limits.d/90-nproc.conf
echo "* soft memlock unlimited" >>/etc/security/limits.d/90-nproc.conf
echo "* hard memlock unlimited" >>/etc/security/limits.d/90-nproc.conf
参考
基于CentOS 7的EMQ或EMQ X百万级并发调优
https://www.bianchengquan.com/article/156268.html
Elasticsearch集群优化
https://www.cnblogs.com/david-qing/p/8560245.html
Centos7高并发优化
https://www.modb.pro/db/159144