天天看點

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

       今天公司網站伺服器突然不能上,登上伺服器發現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)

繼續閱讀