句柄数过高分析

too many open files"这条报错信息,它的实际含义是文件描述符数量超限。用ulimit -a命令打印出各限制值:

查看句柄数
ulimit -a
修改句柄数
vi /etc/security/limits.conf 添加

*  soft  nofile  100000

*  hard  nofile  100000

for x in ps -eF| awk '{ print $2 }';do echo ls /proc/$x/fd 2> /dev/null | wc -l $x cat /proc/$x/cmdline 2> /dev/null;done | sort -n -r | head -n 20 查看文件描述符前20
netstat -tan|awk '$1~/tcp/{print $NF}'|sort|uniq -c|sort -nr 查看当前连接状况

strace -F -p 5351 -T -tt -o trace.log strace情况

-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column
设置返回值的输出位置.默认 为40.
-e expr
指定一个表达式,用来控制如何跟踪.格式如下:

lsof -d pid 查看文件描述符

猜你喜欢

转载自blog.51cto.com/11676712/2488296