
우리는 전용 서버에서 웹 서비스를 호스팅합니다.
로드가 많은 기간에는 서버가 페이지 대신 시간 초과 오류를 매우 자주 반환합니다.
일일 요청 수는 약 170,000개입니다.
그러나 서버에 사용 가능한 메모리가 많고 현재 CPU가 로드되지 않습니다.
왜 서버가 제대로 작동하지 않는지 이해할 수 없습니다.
tcpdump 유틸리티를 사용하여 문제 사례를 프로파일링했습니다. tcpdump가 추적한 좋은 세션과 나쁜 세션은 다음과 같습니다. 요청은 두 실험 모두 동일합니다.
Good - server returns response.
Bad - no response, time-out error.
이 데이터를 보면 왜 문제가 발생하는지 아시나요? 오류의 원인에 더 가까이 다가가려면 어떻게 해야 합니까?
실제 IP 주소를 123.45.67.890으로 바꿨습니다.
---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------
---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------
서비스에 대한 세부정보입니다.
일기예보 서비스입니다. MySQL이 지원하는 Perl로 작성되었습니다. 스크립트는 여러 모듈(CPAN 및 자체 모듈)을 사용합니다.
코드는 비교적 간단합니다. 스크립트는 다른 서버에서 날씨를 다운로드하고 데이터 형식을 변환한 후 XML 응답을 반환합니다. 날씨는 MyISAM DB에 캐시됩니다. 스크립트를 통해서도 요청할 수 있는 INNODB(세계 위치 데이터베이스)가 있습니다.
이는 부하가 높은 기간 동안 측정된 측정항목입니다.
평균 트래픽: 3MBit/초
평균 패킷 수: 3300 패킷/초
호스팅 업체: SuperbHosting
OS: 우분투
서버 매개변수: E6300 CONROE 1.86GHZ 2 X 1MB 캐시 1066 1GB DDR2 667MHZ
이것은 우리가 사용하는 Apache 구성 파일에 대한 링크입니다. http://repkin5.snow.prohosting.com/apache.txt
타임아웃 오류 발생 직후 작성된 서버 상태 리포트입니다. http://repkin5.snow.prohosting.com/server-status.htm 120개 중 하위 서버가 10개만 있으므로 새 요청을 위한 공간이 충분합니다.
로드가 많은 기간 동안의 상위 프로그램 스냅샷입니다.
------
top - 13:21:29 up 15 days, 18:36, 1 user, load average: 0.18, 0.19, 0.21
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.8%us, 1.2%sy, 0.0%ni, 92.8%id, 0.7%wa, 0.0%hi, 3.5%si, 0.0%st
Mem: 1033904k total, 590620k used, 443284k free, 6892k buffers
Swap: 3028212k total, 82556k used, 2945656k free, 64156k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4252 mysql 20 0 162m 48m 3352 S 1 4.8 279:01.27 mysqld
14503 www-data 20 0 43280 14m 3824 S 1 1.4 0:00.16 apache2
14577 www-data 20 0 43012 13m 3500 S 1 1.4 0:00.06 apache2
14401 www-data 20 0 45076 17m 4340 S 0 1.8 0:00.46 apache2
14414 www-data 20 0 45516 18m 4344 S 0 1.8 0:00.47 apache2
14420 www-data 20 0 45624 18m 4372 S 0 1.8 0:00.61 apache2
14421 www-data 20 0 45488 18m 4352 S 0 1.8 0:00.42 apache2
14496 www-data 20 0 44820 17m 4328 S 0 1.7 0:00.18 apache2
14510 www-data 20 0 45216 17m 4300 S 0 1.8 0:00.62 apache2
1 root 20 0 2844 456 404 S 0 0.0 0:05.24 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.24 migration/0
4 root 15 -5 0 0 0 S 0 0.0 32:28.85 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.77 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.15 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:03.07 ksoftirqd/1
8 root RT -5 0 0 0 S 0 0.0 0:00.63 watchdog/1
-----
답변1
우리는 때때로 매우 멋진 서버를 사용하지만("가동 시간"을 통해 알 수 있음) 매우 반응이 없는 이상한 동작을 경험합니다. 확인하는 한 가지 방법은 "netstat"를 사용하여 줄 수를 확인하는 것입니다. Apache mod_status도 시도해 볼 수 있습니다. 우리의 문제는 아직 명확하지 않지만 확실히 외부 세계, 즉 데이터 센터 연결에서 비롯됩니다. 근처에 있는 컴퓨터가 대역폭을 모두 소모하거나 패킷이 도착하기 전에 필터링하여 속도가 느려질 수 있습니다.
그것이 귀하에게 적용되는지는 확실하지 않지만 많은 아파치 프로세스가 무언가를 기다리는 동안 CPU에 대한 로드가 높지 않은 것 같습니다. 어쩌면 그들은 외부로부터 응답을 기다릴 수도 있습니다... "sar"가 있으면 도움이 될 수도 있습니다.
답변2
설명되지 않은 것은 이 웹 서비스가 실제로 무엇인지입니다.하기 위해 설계/작성됨. 동시 스레드에서 실행되는 애플리케이션 코드는 공통 리소스에 대한 일정 수준의 경합을 형성하거나 병목 현상이 발생하는 일부 백엔드 리소스를 기다리는 경우가 많습니다. 따라서 메모리나 프로세서 활용도가 높지 않더라도 이러한 다른 공통 리소스의 제한으로 인해 다른 스레드의 처리가 지연되거나 지연될 수 있으므로 적시에 응답할 수 있습니다.
작업을 수행하기 위해 Apache 위에 어떤 애플리케이션 플랫폼이 설치되어 있습니까? 웹 서비스 요청을 처리하는 데 필요한 최종 리소스 포인트는 무엇입니까? 백엔드 데이터베이스가 관련된 경우 데이터베이스 서버에서 쿼리 교착 상태가 발생할 수 있습니다.
답변3
mpm_prefork_module 및 mpm_worker_module 아래 /etc/apache2/apache.conf 파일에는 두 개의 섹션이 있습니다.
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
더 많은 요청을 처리하려면 환경에 따라 이 섹션을 미세 조정해야 할 수도 있습니다.