아파치 프로세스 정상 시작 못하고 error_log 에서 아래 메세지가 나오는 경우가 있다.
1 |
[core:emerg] [pid 20663] (28)No space left on device: AH00023: Couldn't create the rewrite-map mutex |
아파치 동작 환경에서 각 프로세스간 데이터 공유 및 동기화를 위해서 Semaphore 라는것을 생성한다.
문제는 아파치가 정상적인 종료가 아닌 강제 종료를 하게 된 경우 생성된 Semaphore 가 삭제 되지 못하고 누적이 된다는 것이다
때문에 서버에 한계선 이상까지 생성된 Semaphore 에 의해 새로운 아파치 시작시 Semaphore 를 생성하지 못해서 아파치가 시작이 되지 않는 증상이 나올 수 있다.
때문에 ipcs -s 명령어로 리스트를 뽑고 각 semid 의 연결된 pid 값을 가진 프로세스가 있는지 검사 해서
삭제하는 스크립트를 운용 한다 ‘ㅅ’a
1 2 3 4 5 6 |
#!/bin/bash ## Semaphore Arrays - pid 검사를 통해 종료된 pid 값을 가진 Semaphore Arrays를 종료 시킨다. for a in `/usr/bin/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 /usr/bin/ipcrm -s $a;fi done |
메세지를 보면 이걸 스크립트로 만들어서 실행하고 아파치를 시작하면 된다 ‘ㅅ’a
아니면 서버에서 cron 등록해서 주기적으로 실행해도 된다 ‘ㅅ’a
ps. 세마포어와 뮤텍스는 멀티쓰레드 즉 병렬화 작업을 하는데 필수적으로 사용 되는 요소로 볼수 있다 ‘ㅅ’a
무한히 생성할 순 없으며 ~]# ipcs -ls 명령어로 현재 시스템의 제한 수치를 확인할 수 있다.