今天R&D所在主機出現su: cannot set user id: Resource temporarily unavailable資源不可用報錯,直接通過其他機器ssh huyuh@xxx.xxx.xxx.xxx時,提示 Write failed: Broken pipe。
進行排查發現機器內存使用已經沒有了,進行臨時的內存回收操作:
sync ; sync 將內存數據刷新到磁盤
echo 3 > /proc/sys/vm/drop_caches 內存釋放
echo 0 > /proc/sys/vm/drop_caches 默認
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
echo 3 > /proc/sys/vm/drop_caches
同時查看用戶進行數的占用,發現用戶占用數量過多,而默認的用戶進程數量為1024,所以就出現上面的問題,經過調優以后,再通過su - huyuh正常。
首先去查看了下/etc/profile文件,也有如下的ulimit配置:
ulimit -S -c 0 > /dev/null 2>&1
ulimit -HSn 65000
ulimit -u 65000
注:后面的-u參數為最大進程數,如果害怕其他用戶通過fork死循環耗完本機資源,可以適當減少該值。默認該值為1024 。
接着看/etc/security/limits.conf 文件,發現其下面已新增了nofile的值 ,如下:
huyuh soft nproc 65535
huyuh hard nproc 65535
* soft nofile 65535
* hard nofile 65535
注:limits.conf文件實際上就是ulimit命令的配置文件。nproc為打開的最大進程數,nofile為打開的最大文件數。該處和上面的/etc/profile是重復設置的。實現上該處增加了以后,/etc/profile就不用再做配置的,而且該處配置更規范些,可以對用戶進行限制。
即然以上兩處都做了設置,還是有上面的提示,神奇了。后來又亂折騰了半天,突然想到之前在centos 6.3版本配置的時候,發現centos 6.X以后新增了一個/etc/security/limits.d/90-nproc.conf 文件,用於控制nproc 。這里面的默認配置是
* soft nproc 1024
root soft nproc unlimited
1024大小顯然對我運行程序的單個開發用戶來說,太少了點。更改為65535后,再su - huyuh時,問題解決完成。