어디를 더 깊이 파헤칠지에 대한 제안을 찾고 있습니다.
곧 Apache2 서버는 시작된 후 2~15시간 후에 요청 처리를 중지합니다. 결과적으로 나는 service apache2 restart
하루의 반씩을 해야 한다.
긴 버전:
- 저는 전용 서버(Ubuntu 13.04)에서 몇 개의 웹사이트(Apache 2.2.22, 2013년 7월 12일 구축)를 운영하고 있습니다.
- Apache2 서버는 반년 넘게 잘 작동했지만 이제 갑자기 Apache 프로세스가 다시 시작될 때까지 모든 웹 사이트(약 5개 사이트 포함)에서 요청 처리가 중단됩니다.
- 해당 문제와 관련하여 /var/log/apache에서 비정상적인 로그를 찾을 수 없습니다.
service apache2 status
프로세스가 실행 중임을 보고합니다.
귀하의 제안을 듣고 기뻐할 것입니다. 제 상황에서 어떻게 해야 할까요?
업데이트:
달리기 netstat -an | grep 80
:
tcp6 0 0 :::80 :::* LISTEN
tcp6 325 0 SERV_IP:80 IP_A:35514 CLOSE_WAIT
tcp6 332 0 SERV_IP:80 IP_B:34198 CLOSE_WAIT
tcp6 379 0 SERV_IP:80 IP_C:57859 CLOSE_WAIT
tcp6 0 0 SERV_IP:80 IP_A:35060 CLOSE_WAIT
tcp6 360 0 SERV_IP:80 IP_A:38481 CLOSE_WAIT
tcp6 466 0 SERV_IP:80 IP_B:56324 CLOSE_WAIT
tcp6 361 0 SERV_IP:80 IP_A:53466 CLOSE_WAIT
tcp6 1 0 SERV_IP:80 IP_A:38102 CLOSE_WAIT
tcp6 196 0 SERV_IP:80 IP_E:58125 ESTABLISHED
그리고 이와 같은 추가 항목은 약 150개입니다.
ps aux | grep apache
:
root 2968 0.0 0.0 452240 21116 ? Ss 16:08 0:01 /usr/sbin/apache2 -k start
www-data 5217 0.0 0.0 463584 23820 ? S 17:04 0:03 /usr/sbin/apache2 -k start
이후 라인(www-data)이 약 120개 있으므로 아파치 프로세스가 120개라고 가정합니까?
strafe
Apache2 루트 프로세스에서 사용 :
sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
www-data 프로세스 중 하나에서 사용:
sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX
와, 아파치 프로세스가 멈춰서 최대 연결 제한을 초과하면 새 인스턴스 생성이 중지되는 것 같습니다. 그런데 왜 그들은 막히는 걸까요?
htop, iotop, jnettop은 어떤 이상 현상도 보고하지 않습니다. (과부하 없음)
업데이트 2: 지난 이틀 동안 서버가 더 이상 충돌하지 않습니다. 그래서 더 많은 정보를 얻을 수 없습니다.. 대신 귀하의 도움에 감사하고 답변을 받아들입니다. 더 많은 정보가 제공되면 더 나은 구성의 본문이 포함된 새 질문에 대한 링크를 남길 것입니다. 감사해요
답변1
"service apache2 status" 보고서에 관계없이 ps aux를 수행할 때 Apache 프로세스가 표시됩니까?
문제가 발생하면 netstat -n을 수행할 수 있습니까? 파일 설명자와 같은 리소스가 부족하거나 열려 있는 연결이 너무 많을 수 있습니다.
문제가 발생하는 동안 CPU 사용률이 높습니까? 시스템에 메모리가 부족하여 스래싱이 발생하는 것은 아닐까요?
http 서버가 연결 거부 또는 연결 시간 초과로 응답합니까?
후자의 경우 strace -f -p [apachepid]를 수행하는 것이 좋습니다. 그러면 어떤 시스템 호출이 요청을 차단하고 있는지 알아낼 수 있습니다. 전자의 경우 아마도 아파치가 충돌했을 것입니다.
Tomcat이나 다른 애플리케이션 서버를 프록시합니까, 아니면 일반 정적 HTML을 제공합니까?
인증을 구성했습니까? 예를 들어 인증 레이어에 문제가 있을 수 있습니다.
업데이트:
두 번째 strace에서 나는 이 무리를 봅니다(40,LOCK_EX 어쩌면 프로세스가 어딘가에서 독점 잠금을 얻으려고 시도합니까? lsof -n -p 8554(또는 pid가 무리를 시도하는 모든 것)를 수행하고 잠그려고 하는 파일을 확인할 수 있습니까(40 파일 설명자입니다) "ls /proc/8554/fd"를 사용할 수도 있습니다.