CPU는 많지만 메모리 사용량은 적을 때 아파치를 어떻게 조정해야합니까?


8

CentOS 웹 노드 (LAMP 스택)에서 CPU 사용량은 많지만 메모리 사용량은 낮습니다. 거의 모든 프로세스가 아파치입니다. CPU 사용량이 합리적이 될 때까지 추가 웹 노드를 추가 할 수 있다는 것을 알고 있지만 여기에는 먼 길을 갈 수있는 빠른 튜닝 팁이 있다고 생각합니다.

CPU가 90-100 % 사이에서 바운스됩니다. MySQL은 5 %에서 45 % 사이에서 튀어 오릅니다. 아파치가 나머지를 구성합니다.

상단:

top - 21:15:49 up 46 days, 20:39,  4 users,  load average: 34.17, 44.62, 51.03
Tasks: 133 total,  32 running, 101 sleeping,   0 stopped,   0 zombie
Cpu(s): 90.4%us,  9.6%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   8388608k total,  6116448k used,  2272160k free,    84160k buffers
Swap: 16777208k total,       68k used, 16777140k free,  3488044k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15775 mysql     15   0  827m 153m 3712 S 43.7  1.9   0:55.04 mysqld
15911 apache    16   0  275m  10m 3872 S 24.1  0.1   0:03.15 httpd
15816 apache    16   0  288m  23m 4116 R 23.5  0.3   0:11.88 httpd
15807 apache    15   0  281m  17m 5028 S 21.5  0.2   0:11.71 httpd
15897 apache    16   0  277m  13m 4104 S 21.2  0.2   0:02.68 httpd
15834 apache    16   0  276m  11m 3916 S 20.6  0.1   0:05.22 httpd
15842 apache    16   0  275m  11m 4116 S 19.3  0.1   0:07.86 httpd
15870 apache    16   0  294m  30m 5044 R 17.4  0.4   0:06.36 httpd
15782 apache    15   0  278m  13m 4124 R 12.2  0.2   0:08.54 httpd
15819 apache    15   0  280m  17m 5016 S 11.6  0.2   0:07.01 httpd
15683 apache    16   0  288m  23m 4128 R 10.9  0.3   0:09.90 httpd
15876 apache    16   0  284m  19m 3880 R 10.6  0.2   0:04.35 httpd
15878 apache    15   0  276m  11m 4104 S 10.6  0.1   0:06.42 httpd
15913 apache    16   0  275m  10m 3920 R  9.6  0.1   0:07.98 httpd
15898 apache    16   0  280m  16m 4104 S  9.3  0.2   0:02.85 httpd
15817 apache    16   0  277m  13m 4108 S  9.0  0.2   0:05.55 httpd
15843 apache    16   0  280m  15m 4104 R  8.7  0.2   0:10.80 httpd
15812 apache    16   0  280m  16m 5012 R  8.0  0.2   0:05.18 httpd
15844 apache    16   0  281m  16m 4116 R  7.4  0.2   0:08.63 httpd
15833 apache    16   0  281m  18m 5036 R  7.1  0.2   0:04.76 httpd
15795 apache    16   0  280m  15m 3920 R  6.8  0.2   0:08.65 httpd
15704 apache    15   0  280m  16m 4096 S  6.4  0.2   0:09.06 httpd
15849 apache    16   0  280m  15m 4124 R  6.4  0.2   0:05.59 httpd
15806 apache    16   0  276m  11m 3876 S  6.1  0.1   0:10.33 httpd
15902 apache    16   0  280m  15m 3912 R  6.1  0.2   0:03.40 httpd
15688 apache    16   0  279m  14m 4116 R  5.8  0.2   0:06.07 httpd
15904 apache    16   0  280m  15m 3860 R  5.8  0.2   0:02.74 httpd
15703 apache    16   0  281m  17m 5048 R  5.1  0.2   0:03.86 httpd
15705 apache    16   0  281m  17m 5044 R  4.5  0.2   0:13.54 httpd
15821 apache    15   0  276m  11m 4072 S  4.5  0.1   0:04.24 httpd
15830 apache    16   0  278m  13m 4112 R  4.2  0.2   0:06.37 httpd
15850 apache    16   0  277m  12m 3872 R  3.9  0.2   0:04.64 httpd
15912 apache    15   0  276m  11m 3920 S  3.9  0.1   0:05.58 httpd
15804 apache    15   0  280m  15m 3932 R  3.5  0.2   0:09.13 httpd
15805 apache    16   0  281m  15m 3932 R  3.5  0.2   0:09.00 httpd
15899 apache    16   0  277m  12m 4104 R  2.6  0.2   0:03.26 httpd
15701 apache    16   0  277m  12m 3920 R  2.3  0.2   0:08.35 httpd
15781 apache    15   0  274m 9.8m 3924 S  1.9  0.1   0:10.48 httpd
15848 apache    15   0  276m  11m 3876 S  1.9  0.1   0:06.63 httpd
15901 apache    15   0  275m  10m 3916 S  1.9  0.1   0:02.18 httpd
15879 apache    16   0  280m  16m 4104 R  1.3  0.2   0:02.03 httpd
15820 apache    16   0  281m  17m 5260 R  1.0  0.2   0:05.24 httpd

관련 httpd.conf :

Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

당신의 신청은 무엇입니까? PHP? APC와 같은 opcode 캐시를 사용하고 있습니까?
HTTP500

예, PHP. memcache와 apc가 있지만 지금은 사용하지 않습니다. 노드를 재부팅 할 때 서버가 손실되지 않도록 별도의 memcache 서버를 만들고 있습니다.
Ryan

아파치 프로세스가 MySQL의 응답을 기다리는 중일 수도 있습니다. MySQL의 my.conf를 게시 하시겠습니까? 또한 MySQL에 느린 로그가 구성되어 있습니까? 그들이 있다면 무엇을 말합니까?
KM.

1
당신과 함께 작동합니까 preforkworker? 그리고 새로운 릴리스, 코드 변경, 서버 업데이트 또는 이와 유사한 문제 후에 이러한 문제에 직면하고 있습니까?
grosshat

답변:


5

mod_php에서 실행되는 일부 PHP 스크립트는 너무 많은 CPU 시간을 소비합니다. 전반적인 권장 사항은 일반적이며 각각의 이점이 있습니다.

  • APC 캐시를 설치하고 실제로 실행 중인지 확인하십시오 (APC에는 apc.php 파일이 번들로 제공되어 APC 상태 및 캐시 적중 및 누락을 표시 함).
  • nginx를 설치하고 아파치 앞에 리버스 프록시로 설치하십시오-정적 파일을 제공하는 오버 헤드를 줄이고 서버 동적 컨텐츠에 훨씬 더 많은 CPU 리소스를 남겨 둡니다
  • % t % T 지시문으로 아파치에 CustomLog를 추가하고 로그를 검사하십시오-모든 요청이 가장 많은 시간 동안 실행 중이므로 대부분의 CPU를 소비합니다
  • 해당 스크립트를 최적화 / 다시 작성

2
문제는 분명히 Apache 프로세스 내에서 실행되지만 아파치 자체는 아닙니다. 는 mod_php실제로 가장 큰 원인이다. 실행중인 PHP 스크립트를 프로파일 링하고 CPU를 낭비하기 위해 무엇을하는지 알아 내야합니다. 데이터베이스는 아닙니다. 데이터베이스가 병목 상태이면 많은 Apache 프로세스 IO가 데이터베이스의 응답을 기다리는 동안 차단 된 것을 볼 수 있습니다. Apache / PHP 프로세스가 CPU를 먹는다는 것은 IO를 기다리지 않는다는 것을 의미합니다 (통화 대기 및 비 차단 IO를 사용하는 스크립트를 실행하지 않는 경우 원인을 찾음).
Mikko Rantalainen 2016 년

두 번째 추천에 대해 안내해 주시겠습니까? HowTo 가이드?
mahyard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.