測試環境為 CentOS8 (虛擬機)
Apache 突然掛了,檢查系統訊息出現以下的錯誤.
[root@localhost ~]# cat /var/log/httpd/error_log No space left on device: AH01760: failed to create shared memory segment
shared memory 共享記憶體,主要用途是允許兩個程序 Process 存取同一個邏輯記憶體,要怎麼檢視目前系統的 shared memory 的設定.
[root@localhost ~]# cat /proc/sys/kernel/sem 32000 1024000000 500 32000 [root@localhost ~]# ipcs -ls ------ Semaphore Limits -------- max number of arrays = 32000 max semaphores per array = 32000 max semaphores system wide = 1024000000 max ops per semop call = 500 semaphore max value = 32767
限制公式 : (max number of arrays)*(max semaphores per array) >= (max semaphores system-wide)
如果要修改設定,可以使用以下兩種方式.
- 立即修改
[root@localhost ~]# sysctl -w kernel.sem="250 32000 32 192" kernel.sem = 250 32000 32 192 [root@localhost ~]# sysctl -a| grep kernel.sem kernel.sem = 250 32000 32 192
- 定義在檔案
可自行定義一個檔案在 /etc/sysctl.d/ 或是 /usr/lib/sysctl.d/ 目錄下.[root@localhost ~]# echo "kernel.sem="32000 1024000000 1000 32000"" > /etc/sysctl.d/sem.conf [root@localhost ~]# cat /etc/sysctl.d/sem.conf kernel.sem=32000 1024000000 1000 32000
要立即生效可以透過 sysctl -p file
[root@localhost ~]# sysctl -a| grep kernel.sem kernel.sem = 250 32000 32 192 [root@localhost ~]# sysctl -p/etc/sysctl.d/sem.conf kernel.sem = 32000 1024000000 1000 32000 [root@localhost ~]# sysctl -a| grep kernel.sem kernel.sem = 32000 1024000000 1000 32000
除了設定 Shared memory 大小外還可以透過以下指令來移除指定的 shmid.
檢視系統中的 (IPC: Inter-Process Communication) resources.
[root@localhost ~]# ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status
刪除系統中指定的 (IPC: Inter-Process Communication) resources.
[root@localhost ~]# ipcrm -m [shmid]
檢視系統中的 Apache 所使用的 (IPC: Inter-Process Communication) resources.
[root@localhost ~]# ipcs -a | grep apache | wc -l 90
清理 Apache 所使用的 (IPC: Inter-Process Communication) resources.
[root@localhost ~]# ipcs -a | grep apache | awk '{print $2}' | xargs -n1 ipcrm -s
並重新啟動 Apache
[root@localhost ~]# systemctl restart httpd
沒有解決問題,試試搜尋本站其他內容