httpd dead but subsys locked;No space left on device:Couldn't create accept loc

PS:這篇文章是我2009-08-24在iteye.com上面寫的,好幾年沒在上面寫東西了,決定把上面爲數不多的幾篇博客搬到51cto上面來。
-------------------------------------------------------------------------------------------------

  今天公司網站服務器突然不能上,登上服務器發現httpd服務不能shutdown,報如下錯誤:httpd dead but subsys locked ;把/var/lock/subsys/下的httpd刪除重啓httpd服務也不行,查看/var/log/httpd/error_log發現錯誤如下:No space left on device:Couldn't create accept lock ; 在網上找了下,解決辦法如下:


       1.首先確定你的磁盤空間是否真的不足或者已經達到配額;

       2.如果磁盤空間還很充足或配額也夠,那麼apache能產生’accept lock‘的另一個原因是 semaphore, semaphore是一個內部用於與其子進程進行交流的工具," No space left on device: Couldn't create accept lock "的意思是說apache不能再創建新的semaphore進程。用如下命令查看有多少 semaphore在運行。


       ipcs -s


  你將會看到

  ------ Semaphore Arrays --------
key         semid    owner perms nsems
0x00000000 68681743 apache 600     1
0x00000000 68714515 apache 600     1
0x00000000 68747291 apache 600     1


  你可運行如下命令來安全的殺死每個 Semaphore

 

ipcrm -s <semid>

 

<semid>是上面ipcs -s輸出的第二列值。

想要一次性將所有的Semaphore全部殺死,請運行如下命令:


for semid in `ipcs -s |awk '{print $2}'`; do ip crm -s $semid; done



如果不能再創建更多的Semaphores:

        有些時候你可能想改變系統允許創建 semaphores的數量。這就需要改變內核參數。如果你在虛擬機上運行而不能改變內核參數,請聯繫你的主機提供商來改變這個參數。運行以下命令來查看當前參數:

      

       ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 1024
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 32
semaphore max value = 32767

------ Messages: Limits --------
max queues system wide = 1024
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384


修改 /etc/sysctl.conf文件,增加如下兩行:

kernel.msgmni = 1024
kernel.sem = 250 256000 32 1024

運行命令

   sysctl -p

 使剛改的參數生效。


(kernel.msgmni 該文件指定消息隊列標識的最大數目,即系統 範圍內最大多少個消息隊列。 缺省設置 16)



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章