今天使用sudo發(fā)現(xiàn)報(bào)錯(cuò),百度無(wú)果扼鞋,最后從提示入手排查進(jìn)程數(shù)解決了該問(wèn)題
該錯(cuò)誤是由于root正在運(yùn)行的核心線程數(shù)(了解后這里processes是指LWP(light weight process輕量級(jí)進(jìn)程臊岸,每個(gè)輕量級(jí)進(jìn)程對(duì)應(yīng)一個(gè)核心線程))多于當(dāng)前用戶所允許使用的核心線程數(shù)數(shù)量假哎,導(dǎo)致無(wú)法切換到root權(quán)限引起的報(bào)錯(cuò)
1.png
該核心線程數(shù)限制的配置在/etc/security/limits.d/90-nproc.conf文件
2.png
如上圖所示吝梅,root用戶允許啟動(dòng)的線程數(shù)為unlimited员咽,即無(wú)限制,除此之外的所有用戶允許啟用的線程為1024個(gè)
使用下面的命令可以查看每個(gè)用戶的線程數(shù)量
ps h -Led -o user | sort | uniq -c | sort -n
參數(shù)說(shuō)明:
h 隱藏表頭力试,用于統(tǒng)計(jì)時(shí)不影響統(tǒng)計(jì)結(jié)果
L 以線程維度展示數(shù)據(jù)
e 展示所有用戶的線程
d 展示線程的ID(可以不用這個(gè)參數(shù))
o 可選項(xiàng)徙邻,此處取值user為只展示進(jìn)程的用戶名
sort命令:排序
uniq -c 統(tǒng)計(jì)重復(fù)數(shù)據(jù)出現(xiàn)的數(shù)量
如圖所示,root用戶有2574個(gè)線程畸裳,超出當(dāng)前用戶可用線程數(shù)缰犁,因此sudo -i報(bào)錯(cuò)
3.png
用以下命令確定是哪個(gè)進(jìn)程的線程過(guò)多
cat `ls /proc/|grep [0-9][^a-z]|awk '{print "/proc/"$1"/status"}'`|grep -w -E -i 'Pid|Threads'
參數(shù)說(shuō)明:
ls /proc/|grep [0-9][^a-z] :列出所有進(jìn)程號(hào)
awk '{print "/proc/"$1"/status"}':拼接成“/proc/{進(jìn)程號(hào)}/status”的形式,該文件有進(jìn)程的詳細(xì)信息
最后cat每一個(gè)“/proc/{進(jìn)程號(hào)}/status”文件怖糊,再用grep正則匹配出記錄了Pid那行和Threads那行
如圖所示帅容,確定是5435這個(gè)pid的進(jìn)程線程數(shù)有2257個(gè)
4.png
解決方案,重啟電腦或用root賬號(hào)登錄后kill掉該進(jìn)程就可以了