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
당신과 함께 작동합니까 prefork나 worker? 그리고 새로운 릴리스, 코드 변경, 서버 업데이트 또는 이와 유사한 문제 후에 이러한 문제에 직면하고 있습니까?
— 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.