---查看系統預設的最大檔案控制代碼數,系統預設是1024
# ulimit -n
1024
----查看當前進程開啟了多少控制代碼數
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231 ........
其中第一列是開啟的控制代碼數,第二列是進程ID。
可以根據ID號來查看進程名。
# ps aef|grep 24204
nginx 24204 24162 99 16:15 ? 00:24:25 /usr/local/nginx/sbin/nginx -s
Linux有硬性限制和軟性限制。可以通過ulimit來設定這兩個參數。方法如下,以root使用者運行以下命令:
# ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的開啟檔案控制代碼數量。個人覺得最好不要超過4096,畢竟開啟的檔案控制代碼數越多回應時間肯定會越慢。設定控制代碼計數後,系統重啟後,又會恢複預設值。如果想永久儲存下來,可以修改.bash_profile檔案,可以修改 /etc/profile 把上面命令加到最後.
查看進程佔用的控制代碼數有幾種辦法:
1) 通過cat/proc/pid/fd可以查看線程pid號開啟的線程;
2) 通過lsof命令, /usr/sbin/lsof-p 21404 命令結果如下: COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vas 21404 root cwd DIR 8,3 4096 30195729 /home/users/root/vas
vas 21404 root rtd DIR 8,2 4096 2 /
vas 21404 root txt REG 8,3 112201650 30195914 /home/users/root/vas
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:檔案描述符,應用程式通過檔案描述符識別該檔案。如 cwd、txt等
TYPE:檔案類型,如 DIR、REG、IPV4、FIEO等
DEVICE:指定磁碟的名稱
SIZE:檔案的大小
NODE:索引節點(檔案在磁碟上的標識)
NAME:開啟檔案的確切名稱
另外通lsof命令也可以查看佔用連接埠(下面查看的是9001連接埠被哪個進程佔用)的進程:
/usr/sbin/lsof-i :9001