hp_unix B11.31程式數過多

zr2095發表於2016-03-03
(2010-09-19 16:15)
分類: HP Unix


在HP Unix有兩個可以限制系統最大程式數的核心引數:maxuprc(max user processes)和nproc(the number of system processes);maxuprc只對普通使用者生效,對root使用者不生效,只有nproc才對root生效。

以下的這段日誌是因為普通使用者的maxuprc開的太大,即開成了maxuprc + 5 = nproc (最大值)而且應用程式發生了大量的殭屍程式(defunct)並達到了maxuprc的值引起的。基本所有的系統命令不能執行,root使用者也不能遠端登入。


GenericSysName [HP Release B.11.31] (see /etc/issue)
Console Login: root
Please wait...checking for disk quotas
could not execute quota command

- - - - - - - - - - - - Live Console - - - - - - - - - - - -
/etc/profile[30]: The fork function failed. Too many processes already exist.
/etc/profile[47]: The fork function failed. Too many processes already exist.

syslog中有proc table is full 的報錯,這說明nproc也用滿了。


發生這種情況之後,假如還有一個已登入的終端的話,可以用exec kill <proc id>來嘗試殺某個程式(猜吧),如果成功,ps就可以執行了。然後再做響應處理。

我當前的系統nproc預設值是4200,maxuprc的預設值是256。maxuprc比較容易滿,可以適當加大。

# kctune |grep nproc
nproc 4200 Default Immed
# uname -a
HP-UX hpux B.11.31 U 9000/800 1071694491 unlimited-user license

加大方法:

kctune maxuprc+=1024 (增加1024)

nproc大最大值我個人認為跟系統配置有關係,但肯定不能超過65535。

在HP-UX hpux B.11.31 U 9000/800 1071694491上調大maxuprc和nproc,不必重啟就可以工作。

# kctune nproc+=4000
==> Update the automatic 'backup' configuration first? y
* The automatic 'backup' configuration has been updated.
* Future operations will update the backup without prompting.
* The requested changes have been applied to the currently
running configuration.
Tunable Value Expression Changes
nproc (before) 4200 Default Immed
(now) 8200 8200

用下句來測試建立6000個程式:

i=1; while :; do nohup sleep 200 & ((i=$i + 1)); echo Now No is $i;if [ $i -eq 6000 ]; then echo === Now No is $i ====; break;fi; done

我的大致理解是這樣。在實際環境中還需要具體測試。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30208428/viewspace-2028379/,如需轉載,請註明出處,否則將追究法律責任。

相關文章