1赴背、為了避免系統(tǒng)資源被耗光赋兵,需要對進程的最大進程數(shù)進行限制至扰,通過向?qū)?yīng)進程所在 cgroup 的 pid.max 文件中寫入具體的數(shù)字來限制其進程數(shù)楞遏。默認值為 ‘max’ 也就是不限制茬暇,和 cgroup 最上層中的限制數(shù)保持一致。pids.current 表示 cgroup 該層路徑下已經(jīng)使用 pid 數(shù)量寡喝。如果 pid 已經(jīng)達到上限糙俗,再創(chuàng)建進程會出現(xiàn) Resource temporary unavailable 報錯;
2预鬓、pid 被大量使用的原因:每一個進程都需要一個 pid巧骚,也會占用一定的資源,如果不限制進程數(shù)珊皿,可能會出現(xiàn)類似 fork bomb 耗光系統(tǒng)資源的問題网缝。通常來說容器中可能由于 init 進程沒有回收子進程而出現(xiàn)大量僵尸進程導(dǎo)致 pid 被耗光,當子進程退出時父進程沒有回收子進程時蟋定,子進程就會成為僵尸進程粉臊;
3、系統(tǒng) pid 最大值設(shè)置:pid 最大值可以在系統(tǒng)文件 /proc/sys/kernel/pid_max 中看到驶兜,系統(tǒng)在初始化時默認會設(shè)置最大值扼仲,一般小于等于 32 核的機器,pid_max 會被默認設(shè)置為 32768抄淑,大于32核的默認被設(shè)置為 核數(shù)*1024屠凶;
參考:
https://www.kernel.org/doc/Documentation/cgroup-v1/pids.txt