LAMP(Linux, Apache, MySQL, PHP)환경에서 서버를 운영하다가, 갑작스럽게 Apache가 중지되는 현상이 간혹 발생합니다. 로그 분석에 돌입해서 찾아보기도하고, 구글에 검색해보기도 합니다. Error 로그에 child process 관련 로그만 잔뜩있을 때, 혹은 다음 로그가 확인이 될 때 조치 방법입니다.
해당 증상이 발생했을 때 로그
No space left on device: couldn't create accept lock
이 경우는 장치(장비)에 공간이 없다고 나타나는 것으로, 단순하게 kill -9 명령어로는 해결되지 않습니다. 중지된 Apache의 공유메모리를 강제 회수를 진행해야합니다.
ipcs | awk '/apache/{print $2}' | xargs -i ipcrm -s {}
위 방법으로는 간단하지만, 만약에 시스템 자원을 확보하거나 증설이 어려운 경우에는 스크립트로 일이 발생했을 때 조치를 취해볼 수 있습니다.
#!/bin/bash
for a in `ipcs -s|awk '$2~/[0-9]/{print $2}'`
do sem_pid=`ipcs -si $a|sed '/^$/d'|tail -1|awk '$5~/[0-9]/{print $5}'`
if [[ -z `ps -e|awk '$1~/^'$sem_pid'$/{print}'` ]];then ipcrm -s $a;fi
done
이후 Apache를 실행해보면 정상적으로 실행되는 것을 확인할 수 있습니다. 만약 멀티스레드 관련 제한은 다음 명령어로 확인이 가능합니다.
ipcs -ls