开发环境发版平台报 Too many open files,重启后恢复正常。事后复盘一下问题可能出在哪儿。
Linux限制进程打开文件数默认是1024。
执行 ulimit -a 发现 open files 是 65530,正常情况下不至于打满。
也可以执行 ulimit -n 直接返回进程最大文件数。
执行 lsof 查看进程当前打开了哪些文件:
lsof -p 31224 > lsof.txt
分析一下 FD:
cat lsof.txt | awk ‘{print $4}‘| sort | uniq -c
| 文件数 | FD | 说明 | 举例 |
|---|---|---|---|
| 34 | mem | memory-mapped file | /usr/jdk1.8.0_51/jre/lib/rt.jar /lib64/librt-2.12.so |
| 5 | DEL | 被进程打开过后删除了 | /tmp/jar_cache4820710964158921039.tmp |
| 1 | cwd | current work dirctory | /usr/local/tomcat/deploy-ms6411 |
| 1 | rtd | root directory | / |
| 1 | txt | 程序代码,如应用程序二进制文件本身或共享库 | /usr/jdk1.8.0_51/bin/java |
| 1 | 0r | 处于只读模式 | /usr/local/tomcat/build-detail/25190 |
| 1 | 1w | 处于只写入模式 | /usr/local/tomcat/logs/finance-deploy-ms--dev/web.log |
| 1 | 4u | 处于读取/写入模式 | 172.22.145.126:48953->172.22.23.160:mysql (ESTABLISHED) |
分析一下 TYPE:
cat lsof.txt | awk ‘{print $5}‘| sort | uniq -c
| 文件数 | FD | 说明 | 举例 |
|---|---|---|---|
| 518 | REG | ||
| 59 | IPv6 | ||
| 27 | FIFO | ||
| 7 | CHR | ||
| 2 | DIR | ||
| 2 | unix | ||
| 1 | IPv4 | ||
| 1 | TYPE |
原文:https://www.cnblogs.com/mougg/p/12410995.html