Apache"No spache left on device"錯誤與解決方法

2021-03-14    分類: 網(wǎng)站建設

Apache"No spache left on device"錯誤與解決方法
1、錯誤現(xiàn)象
這是一個使用創(chuàng)新互聯(lián)服務器的客戶案例,客戶反映在執(zhí)行“apache start”啟動Apache時無報錯信息,但是網(wǎng)頁還是不能訪問。客戶的網(wǎng)站是基于Apache+PHP+Mysql的在線交易平臺,聽到客戶描述的現(xiàn)象后,反應應是防火墻屏蔽了HTTP端口或SELinux的問題,于是登錄服務器查看相關信息,如下圖。
從輸出可知,防火墻所有策略都處于開放狀態(tài),并未所任何限制,而SELinux也處于關閉狀態(tài),應該不是防火墻問題導致的。
既然不是防火墻攔截的問題,那么看看httpd進程是否存在及httpd端口是否正常啟動,操作過程如下圖。
這個操作首先查看了服務器上的httpd進程,發(fā)現(xiàn)并沒有httpd進程運行,同時httpd對應的端口80也并無啟動,于是重新啟動Apahce,在啟動Apache的過程中并沒有報錯,啟動完成后發(fā)現(xiàn)仍然沒有httpd進程運行,由此看來,應該是Apache內容出現(xiàn)了問題。
2、解決思路
在判斷是Apache的問題后,首先要看的是Apache的啟動日志,在查看Apache的error日志后,發(fā)現(xiàn)了一個可疑輸出,內容為:
No space left device:mod_rewrite:could not create rewrite_log_lock Configuration Failed
看到這個錯誤提示,感覺應該是磁盤空間耗盡導致的,于是趕緊查看系統(tǒng)所有磁盤分區(qū),結果發(fā)現(xiàn)所有磁盤分區(qū)都還有很多可用空間,這有些奇怪了。
Linux下對磁盤空間的占用分為三個部分:物理磁盤、inode節(jié)點磁盤空間和信號磁盤空間。通過檢查服務器的物理磁盤空間,發(fā)現(xiàn)仍有很多剩余,因此被排除了物理磁盤空間的問題。接著通過“df -i”命令查看系統(tǒng)可用的inode節(jié)點,發(fā)現(xiàn)每個分區(qū)可用的inode還有很多,這樣inode節(jié)點問題也被排除了,那么應該是信號量磁盤空間耗盡導致的。
這里簡單介紹了Linux信號量相關的知識,信號量是一種鎖機制用于協(xié)調進程之間互斥的訪問臨界資源,以確保某種共享資源不被多個進程同時訪問。Linux系統(tǒng)的信號量是用于進程間通信的。它有兩種標準實現(xiàn),分別是POSIX及System v,現(xiàn)在大多數(shù)Linux系統(tǒng)都實現(xiàn)了這兩種標準。這兩種標準都可用于進行線程間的通信,只是系統(tǒng)調用方式略有不同。
Syetem v信號量通過系統(tǒng)調用semget來創(chuàng)建,通過linux命令ipcs即可顯示進程間通信用的System v類型信號量及共享內存。
POSIX信號量可用于線程和線程間通信,并可分為有名和無名兩種。也可簡單理解為是否保存在磁盤上。有名的信號量會以文件形式保存在/dev/shm下,因此可用于不相關的進程間通信,而無名信號量只能用于線程間和父子進程間通過。
在對信號量有了簡單了解后,可以發(fā)現(xiàn)Apaceh使用的進程間通信方式應該是Syqtem v,因此可以通過ipcs命令查看和解決這個問題了。
3、解決問題
在解決這個問題之前,首先查看下Linux系統(tǒng)默認信號量的設置值是多少,執(zhí)行如下命令:
[root@localhost ~]#cat /proc/sys/kemel/sem
250 32000 32 128
這四個輸出值的含義如下:
SEMMSL,此參數(shù)用于控制每個信號集的信號數(shù)。
SEMMNS,此參數(shù)用于控制整個Linux系統(tǒng)中信號的數(shù)量。
SEMOM,此參數(shù)用于控制每個semop系統(tǒng)調用可以執(zhí)行的信號操作數(shù)。
SEMMNI,此內核參數(shù)用于控制整個Linux系統(tǒng)中信號集的數(shù)量。
接著通過ipcs命令查看httpd進程占用了多少信號量,執(zhí)行如下命令:
[root@localhost ~]#ipcs -s|grep daemon
其中“daemon”是啟動Apahce進程的用戶,默認是daemon,也可能是nobody用戶,根據(jù)實際環(huán)境而定。執(zhí)行完此命令后,發(fā)現(xiàn)很多基于daemon的信號量輸出,問題終于找到了。解決信息量耗盡的方法很簡單,通過ipcrm命令消除即可,最簡單方法是執(zhí)行如下命令組合:
[root@localhost ~]#ipcs -s | grep nobody|perl -e 'while(<STDIN>)'{@=split(^s+/)};print
'ipcrm sem $a[1]'
執(zhí)行完上面這個命令后,再次啟動Apache,然后查看是否有httpd進程啟動,可以看到,此時httpd進程啟動了,那么Apache也工作正常了。

當前題目:Apache"No spache left on device"錯誤與解決方法
標題來源:http://muchs.cn/news17/105167.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化定制開發(fā)、App設計標簽優(yōu)化網(wǎng)站制作、電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站