背景
机房迁移:应用迁移,采用的是扩容迁移
应用在老机房是好的,扩到新机房就有问题
问题表象
1、刚启动服务一段时间是好的;
2、重启是可以恢复一会后又会有报错;
3、有报错的同时也有正常业务日志
查证流程
第一阶段:
由于是机房搬迁,初步怀疑是网路层面的问题(再加上新机房确实是存在部分机器网络的问题),
且报错表象也是超时报错,所以一直纠结网络层面,初期时间一直耗在网络上面进行变更;
第二阶段:
网络做了变更优化,但是问题还是并未解决,于是在总部,在其他机房以及老机房四地机房都进行相应的
再一步扩容进行验证,发现,所有的新加的还是存在问题;
第三阶段:
当初步证实不是网络问题后,重新恢复是否是tomcat包的配置以及服务器上配置是否存在差异,再次进行验
证,所有的应用相关的配置再从老服务器上进行拷贝覆盖,再次进行验证,发现还是存在问题,且同样的是
刚开始是好的,后面过段时间就崩
第四阶段:
网络排除,应用配置排除后,也开始怀疑服务器系统层面的配置差异了,且研发再进行dump分析后,也提出
过是否是与文件句柄数有关导致的,这是第一次最接近正确答案的时候,但是通过查看,文件句柄数和老服
务器上配置是一样的 65535,但是此时也发现了新老服务器上/etc/security/limits.conf 这个文件配置参数有
点差别,修改了这个配置文件的服务就一直正常了
复盘:
Linux操作系统中利用ulimit限制shell启动进程占用的资源,ulimit支持对用户的打开进程数、进程打开文件句
柄数、进程打开文件的大小、进程coredump文件大小等资源进行限制,从而防止某个用户进程过度占用系统
资源,避免影响整个操作系统和其他应用的正常运行。但是使用ulimit进行限制后,当用户资源超限制时会出
现各种各样的报错,用户打开进程数,即nproc参数。
用户的nproc达到限制,无法创建新的进程
由于是用户打开进程数达到了限制,那么排查方法主要是查看用户目前打开的进程的数量
ps -u web -Lf
超过了设置的800 的值
问题基本确定在新机房服务器的这个配置上面了
web soft nproc 800
web hard nproc 1000
设置限制数量,第一列表示用户,*表示所有用户
soft 软限制,hard硬限制。当数量达到软限制的时候会出现报警,达到硬限制的时候才不会增加
soft nproc: 单个用户可用的最大进程数量(软限制)
hard nproc: 单个用户可用的最大进程数量(硬限制)
soft nofile:可打开的文件描述符的最大数(软限制)
hard nofile:可打开的文件描述符的最大数(硬限制)
关于nproc设置:centos6,内核版本是2.6.32. 默认情况下,ulimit -u的值为1024,
是/etc/security/limits.d/90-nproc.conf的值限制;注释掉这个限制后,值为95044