본문 바로가기
리눅스

'c queue max run limit reached

by 혜룐 2015. 11. 10.
/var/log/cron 파일에 'c queue max run limit reached'와 같은 메시지가 기록되는 경우가 있다. 보통은 이와 함께 아래와 같이 'rescheduling a cron job' 이라는 메시지가 같이 나온다.
! MAXRUN (100) procs reached 월 9월 7 04:21:00 2009
! c queue max run limit reached 금 9월 11 09:46:00 2009
! rescheduling a cron job 금 9월 11 09:46:00 2009
위 메시지는 cron 작업이 동시에 진행될 수 있는 max값이 100개 인데, 현재 100개 모두 사용되고 있으며, 따라서 queue 에 더이상 새로운 cron 작업이 실행되지 못해서 발생하는 에러이다.
이런 경우, 일반적인 원인은 cron에 등록되어 현재 실행중인 작업 중에서 실행 후 정상적으로 종료되지 못해 프로세스에 그대로 남아 있는 경우 발생한다. 이런 상황을 방치하면, 중요한 cron작업이 수행되지 못해 시스템에 치명적인 장애를 유발할 수 있다.
기본값 : 100 개로 queuedefs에 정의되어 있다.
해결 방법은 솔라리스는 /etc/cron.d , SunOS는
/var/spool/cron, 리눅스는 없다.
c.200j10n120w
( c : cron , 200 : 동시 허락되는 cron 수 , 10은 nice value , 120 : wait value ) 
참고 
# a - sh jobs 
# b - batch jobs 
# c - cron event 
# d - sync event 
# e - ksh jobs 
# f - csh jobs
하지만, 위의 방법은 실행중인 cron 작업이 비정상적이어서 종료되지 않은 경우라면, 근본적인 해결책이 되지 못한다. 비정상적은 cron작업은 새로 실행될때마다 계속해서 갯수만 잡아먹고 종료되지 않기 때문이다.
따라서, 근본적으로는 문제가 되는 cron 작업을 찾아서 원인을 제거해야 하고, 임시적 해결책으로는 비정상적으로 종료되지 않고 있는 프로세스를 찾아서 강제로 kill 해줘야 한다.
아래와 같은 방법으로 해 준다.
해당 user의 cron 작업을 본다. 여기에선 root 로 실행된 것들을 보여준다.
# ps -ef | grep /usr/sbin/cron | grep root | nawk -F' ' '{print $2}'
위 결과에서 종료되지 않고 많이 남아 있는 EXP_ADPROD 작업이 있음을 확인하고 얼마나 되는지 확인한다.
# ps -ef|grep EXP_ADPROD|awk '{print $2}
확실히 문제있음을 확인했으면 아래와 같이 kill 한다.
# kill -9 `ps -ef|grep EXP_ADPROD|awk '{print $2}'`