句柄数太高分析

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

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

*  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 查看当前链接情况code

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 查看文件描述符cmd