1、為了避免系統(tǒng)資源被耗光,需要對進程的最大進程數進行限制,通過向對應進程所在 cgroup 的 pid.max 文件中寫入具體的數字來限制其進程數。默認值為 ‘max’ 也就是不限制,和 cgroup 最上層中的限制數保持一致。pids.current 表示 cgroup 該層路徑下已經使用 pid 數量。如果 pid 已經達到上限,再創(chuàng)建進程會出現 Resource temporary unavailable 報錯;
2、pid 被大量使用的原因:每一個進程都需要一個 pid,也會占用一定的資源,如果不限制進程數,可能會出現類似 fork bomb 耗光系統(tǒng)資源的問題。通常來說容器中可能由于 init 進程沒有回收子進程而出現大量僵尸進程導致 pid 被耗光,當子進程退出時父進程沒有回收子進程時,子進程就會成為僵尸進程;
3、系統(tǒng) pid 最大值設置:pid 最大值可以在系統(tǒng)文件 /proc/sys/kernel/pid_max 中看到,系統(tǒng)在初始化時默認會設置最大值,一般小于等于 32 核的機器,pid_max 會被默認設置為 32768,大于32核的默認被設置為 核數*1024;
參考:
https://www.kernel.org/doc/Documentation/cgroup-v1/pids.txt