Apache No Space Left on Device 오류 해결하기

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