Linux查看文件句柄占用多的进程 ,查看Linux某进程的句柄数,并通过ulimit -n 单个进程打开的最大文件句柄数量限制解决accept4() failed (24: Too many open files)
查看当前进程的最大可以打开的文件数:
cat /proc/PID/limits (如果通过ulimit -n 设置或者修改/etc/security/limits.conf,看看进程是否生效)
ulimit -a|grep "open files"
open files (-n) 1024000
直接对文件的修改如下:
cat /etc/security/limits.conf|grep -Ei 'soft|hard'
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 1024000
* hard nproc 1024000
cat /proc/1279/limits |grep files
Max open files 8192 8192 files
cat /proc/64658/limits |grep files
Max open files 1024000 1024000 files
cat /proc/64658/limits |grep files
cat /proc/18576/limits |grep files
Max open files 1024000 1024000 files
怎么修改?
# CentOS7系统使用命令
prlimit --nofile=65536:65536 --pid 39977
# CentOS6系统使用命令
echo - n "Max open files=65535:65535" > /proc/39977/limits
当然,可以通过重启这个进程所对应的服务(如果可重启,也不会来修改这个session里的参数了)来重新读取系统里的默认设置。
ulimit -n
# 临时修改,重启失效
ulimit -HSn 65536
# 永久解决
vim /etc/security/limits.conf
# 添加如下的行
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
实践如下:
原文链接:https://blog.csdn.net/dqchouyang/article/details/115230076
Linux查看文件句柄占用多的进程 :
其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名和进程的句柄详细情况:
8798 8770 8797 8770 8769 8764 8763 8713 8618 均是PHP的PHP-FPM的句柄数,也就是说第一是virtualBOX,再才是certmonger服务,后是clock-applet,再后是php-fpm进程,这些进程文件数分布排列很正常~
(1)这个没啥用就关了得了:
certmonger 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
chkconfig certmonger off
root@119.10.6.54:~# chkconfig certmonger off
root@119.10.6.54:~# chkconfig --list|grep certmonger
certmonger 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
root@119.10.6.54:~# service certmonger stop
停止 certmonger: [确定]
重启后按Esc或者F5键,可以查看系统启动过程,卡在哪里,我的是在certmonger启动OK之后卡住的,完全有必要停掉,来源:
http://www.linuxidc.com/Linux/2015-02/112688.htm
(2)/usr/libexec/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=29
这个好像是gnome的时间同步啥的一个服务,暂时不关。
(1)查看Linux系统默认的最大文件句柄数,系统默认是1024
(3)对服务器没有用的也关了,调节cpu速度用来省电,常用在Laptop上:
service cpuspeed stop
chkconfig cpuspeed off
——————————————————————————————————————————————————
ulimit -n
1024
(2)查看当前进程打开了多少句柄数
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231 ........
其中第一列是打开的句柄数,第二列是进程ID。
(3)可以根据ID号来查看进程名。
ps aef|grep 24204
nginx 24204 24162 99 16:15 ? 00:24:25 /usr/local/nginx/sbin/nginx -s
来自:http://www.examw.com/linux/all/146041/
accept4() failed (24: Too many open files)
如何优化这个
ulimit -n 是多少?
文件描述符不够用了
1024
这个可以开大点
能开多大,如何去衡量啊
内存足够都可以
一般开10万
好的,我看看。
来源:PHP高级编程QQ对话。
=========================================
实践如何找到当面数据库打开了多少个文件句柄数的如下实践:
1)先PS一下获取到Mysql的进程号:
root 4935 0.0 0.0 63992 272 ? S Aug06 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/conf/my.cnf
mysql 5622 4.5 83.4 14974096 6823984 ? Sl Aug06 149:07 /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/db/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/db/mysql/localhost.localdomain.err --open-files-limit=65535 --pid-file=/data/db/mysql/localhost.localdomain.pid --socket=/tmp/mysqld.sock --port=3306
2)得到如下两个进程号:
4935
5622
3)通过lsof获取到所有进程的句柄数再grep一下就得到了当前mysql的进程为4935的句柄数:
/usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 4935
4 4935
4)一样的方法:
/usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 5622
4 5622
目前只打开了4个文件句柄数量,远远底于系统默认值1024。
=========================================
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
131 24204
57 24244
57 24231
56 24264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps -aef|grep 24204
mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。
用普通用户登录,执行ulimit -n,查看文件打开数。
如果太小,默认值是1024,则进行如下操作:
使用root用户修改vim /etc/security/limits.conf 文件。
在文件最后加如下两句话:
* soft nofile 50000
* hard nofile 50000
参考:http://hi.baidu.com/itnote/item/7347bfea829e3ee3fa42bad8
cat /proc/PID/limits (如果通过ulimit -n 设置或者修改/etc/security/limits.conf,看看进程是否生效)
ulimit -a|grep "open files"
open files (-n) 1024000
直接对文件的修改如下:
cat /etc/security/limits.conf|grep -Ei 'soft|hard'
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 1024000
* hard nproc 1024000
cat /proc/1279/limits |grep files
Max open files 8192 8192 files
cat /proc/64658/limits |grep files
Max open files 1024000 1024000 files
cat /proc/64658/limits |grep files
cat /proc/18576/limits |grep files
Max open files 1024000 1024000 files
怎么修改?
# CentOS7系统使用命令
prlimit --nofile=65536:65536 --pid 39977
# CentOS6系统使用命令
echo - n "Max open files=65535:65535" > /proc/39977/limits
当然,可以通过重启这个进程所对应的服务(如果可重启,也不会来修改这个session里的参数了)来重新读取系统里的默认设置。
ulimit -n
# 临时修改,重启失效
ulimit -HSn 65536
# 永久解决
vim /etc/security/limits.conf
# 添加如下的行
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
实践如下:
原文链接:https://blog.csdn.net/dqchouyang/article/details/115230076
Linux查看文件句柄占用多的进程 :
其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名和进程的句柄详细情况:
8798 8770 8797 8770 8769 8764 8763 8713 8618 均是PHP的PHP-FPM的句柄数,也就是说第一是virtualBOX,再才是certmonger服务,后是clock-applet,再后是php-fpm进程,这些进程文件数分布排列很正常~
(1)这个没啥用就关了得了:
certmonger 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
chkconfig certmonger off
root@119.10.6.54:~# chkconfig certmonger off
root@119.10.6.54:~# chkconfig --list|grep certmonger
certmonger 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
root@119.10.6.54:~# service certmonger stop
停止 certmonger: [确定]
重启后按Esc或者F5键,可以查看系统启动过程,卡在哪里,我的是在certmonger启动OK之后卡住的,完全有必要停掉,来源:
http://www.linuxidc.com/Linux/2015-02/112688.htm
(2)/usr/libexec/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=29
这个好像是gnome的时间同步啥的一个服务,暂时不关。
(1)查看Linux系统默认的最大文件句柄数,系统默认是1024
(3)对服务器没有用的也关了,调节cpu速度用来省电,常用在Laptop上:
service cpuspeed stop
chkconfig cpuspeed off
——————————————————————————————————————————————————
ulimit -n
1024
(2)查看当前进程打开了多少句柄数
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231 ........
其中第一列是打开的句柄数,第二列是进程ID。
(3)可以根据ID号来查看进程名。
ps aef|grep 24204
nginx 24204 24162 99 16:15 ? 00:24:25 /usr/local/nginx/sbin/nginx -s
来自:http://www.examw.com/linux/all/146041/
accept4() failed (24: Too many open files)
如何优化这个
ulimit -n 是多少?
文件描述符不够用了
1024
这个可以开大点
能开多大,如何去衡量啊
内存足够都可以
一般开10万
好的,我看看。
来源:PHP高级编程QQ对话。
=========================================
实践如何找到当面数据库打开了多少个文件句柄数的如下实践:
1)先PS一下获取到Mysql的进程号:
root 4935 0.0 0.0 63992 272 ? S Aug06 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/conf/my.cnf
mysql 5622 4.5 83.4 14974096 6823984 ? Sl Aug06 149:07 /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/conf/my.cnf --basedir=/usr/local/mysql --datadir=/data/db/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/db/mysql/localhost.localdomain.err --open-files-limit=65535 --pid-file=/data/db/mysql/localhost.localdomain.pid --socket=/tmp/mysqld.sock --port=3306
2)得到如下两个进程号:
4935
5622
3)通过lsof获取到所有进程的句柄数再grep一下就得到了当前mysql的进程为4935的句柄数:
/usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 4935
4 4935
4)一样的方法:
/usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 5622
4 5622
目前只打开了4个文件句柄数量,远远底于系统默认值1024。
=========================================
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
131 24204
57 24244
57 24231
56 24264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps -aef|grep 24204
mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。
用普通用户登录,执行ulimit -n,查看文件打开数。
如果太小,默认值是1024,则进行如下操作:
使用root用户修改vim /etc/security/limits.conf 文件。
在文件最后加如下两句话:
* soft nofile 50000
* hard nofile 50000
参考:http://hi.baidu.com/itnote/item/7347bfea829e3ee3fa42bad8
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/6570/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2022-8-29 18:26
评论列表