linux非root用戶使用sudo報too many processes問題

今天使用sudo發(fā)現(xiàn)報錯,百度無果,最后從提示入手排查進程數(shù)解決了該問題

該錯誤是由于root正在運行的核心線程數(shù)(了解后這里processes是指LWP(light weight process輕量級進程,每個輕量級進程對應一個核心線程))多于當前用戶所允許使用的核心線程數(shù)數(shù)量,導致無法切換到root權(quán)限引起的報錯


1.png

該核心線程數(shù)限制的配置在/etc/security/limits.d/90-nproc.conf文件


2.png

如上圖所示,root用戶允許啟動的線程數(shù)為unlimited,即無限制,除此之外的所有用戶允許啟用的線程為1024個

使用下面的命令可以查看每個用戶的線程數(shù)量

ps h -Led -o user | sort | uniq -c | sort -n
參數(shù)說明:
h 隱藏表頭,用于統(tǒng)計時不影響統(tǒng)計結(jié)果
L 以線程維度展示數(shù)據(jù)
e 展示所有用戶的線程
d 展示線程的ID(可以不用這個參數(shù))
o 可選項,此處取值user為只展示進程的用戶名
sort命令:排序
uniq -c 統(tǒng)計重復數(shù)據(jù)出現(xiàn)的數(shù)量

如圖所示,root用戶有2574個線程,超出當前用戶可用線程數(shù),因此sudo -i報錯


3.png

用以下命令確定是哪個進程的線程過多

cat `ls /proc/|grep [0-9][^a-z]|awk '{print "/proc/"$1"/status"}'`|grep -w -E -i 'Pid|Threads'
參數(shù)說明:
ls /proc/|grep [0-9][^a-z] :列出所有進程號
awk '{print "/proc/"$1"/status"}':拼接成“/proc/{進程號}/status”的形式,該文件有進程的詳細信息

最后cat每一個“/proc/{進程號}/status”文件,再用grep正則匹配出記錄了Pid那行和Threads那行

如圖所示,確定是5435這個pid的進程線程數(shù)有2257個


4.png

解決方案,重啟電腦或用root賬號登錄后kill掉該進程就可以了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容