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