在linux下網絡服務經常會遇到的一個問題就打開過多的端口或者創建大量的連接會失敗,這是因為系統對每個進程能夠打開的資源是有限制的。
打開過多的端口或者創建大量的連接,都會打開大量文件描述符,linux系統默認對每個進程打開的文件描述符限制為1024,大於這個值就會打開失敗。
ulimit命令就可以修改這個限制,另外ulimit的還有一個用途,就是修改程序崩潰的時候生成core文件的限制。
這個命令是修改每個進程的限制,我們有時只想修改自己程序的限制,那么linux系統提供了兩個系統調用修改這個限制,可以在程序中調用動態修改。
#include
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
在終端輸入ulimit -h查看其他選項:
ulimit: 用法: ulimit [-SHabcdefilmnpqrstuvxT] [limit]
修改選項大小的命令格式為:ulimit+要修改的選項+要修改選項的大小 查看選項限制的命令格式為:ulimit+要查看的選項
修改文件描述符限制:
ulimit -Sn 2048
查看文件描述符限制:
ulimit -Sn選項-H的意義是內核總的硬性限制,是所有用戶軟件不能超過的總數限制,選項-S的意義是用戶軟件的限制,是單個用戶進程的限制。
如果不加選項就同時修改-H和-S的值,所以一般都加上選項-S。