2016-11-12 5 views
0

8GB RAM이 장착 된 서버 Intel (R) Xeon (R) CPU X3440이 있습니다.
내가보기에는 아파치가 모든 RAM을 사용하고 서버를 응답하지 않게 만든다. 여기서버가 다운 될 때까지 모든 메모리를 사용하는 Apache httpd


내 아파치 구성입니다 :

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

그리고 이것은 내 무료 -m입니다 :

  total  used  free  shared buffers  cached 
Mem:  7859  7725  134   0  189  1566 
-/+ buffers/cache: 5969  1889 
Swap:  4095   61  4034 

그리고 이것은 내 TOP입니다 :

top - 10:19:57 up 23 min, 1 user, load average: 8.08, 6.50, 3.90 
Tasks: 1124 total, 1 running, 1123 sleeping, 0 stopped, 0 zombie 
Cpu(s): 9.8%us, 3.2%sy, 0.1%ni, 60.0%id, 26.2%wa, 0.0%hi, 0.6%si, 0.0%st 
Mem: 8048096k total, 7924168k used, 123928k free, 207920k buffers 
Swap: 4194300k total, 79820k used, 4114480k free, 1460356k cached 

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
1921 mysql  20 0 1653m 39m 3428 S 62.7 0.5 6:26.24 mysqld 
7944 apache 20 0 399m 29m 4236 S 6.6 0.4 0:10.13 httpd 
3201 apache 20 0 382m 11m 3880 S 2.3 0.1 0:00.50 httpd 
8030 apache 20 0 382m 10m 3872 S 2.0 0.1 0:00.39 httpd 
2837 apache 20 0 384m 13m 3916 S 1.3 0.2 0:00.37 httpd 
3160 apache 20 0 383m 11m 3908 S 1.3 0.2 0:00.55 httpd 
10555 apache 20 0 382m 11m 3884 S 1.3 0.1 0:00.48 httpd 
13626 apache 20 0 381m 10m 3828 S 1.3 0.1 0:00.05 httpd 
13668 apache 20 0 382m 11m 3760 S 1.3 0.1 0:00.16 httpd 
14284 apache 20 0 381m 10m 3712 S 1.3 0.1 0:00.06 httpd 
2848 apache 20 0 382m 11m 3876 S 1.0 0.2 0:00.49 httpd 
5254 apache 20 0 382m 11m 3852 S 1.0 0.1 0:00.25 httpd 
6085 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.26 httpd 
6257 apache 20 0 382m 11m 3876 S 1.0 0.1 0:00.50 httpd 
8067 apache 20 0 380m 9.8m 3732 S 1.0 0.1 0:00.18 httpd 
14314 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.09 httpd 
14328 apache 20 0 380m 9288 3800 S 1.0 0.1 0:00.16 httpd 

는 그래서 무엇인가 이 문제를 해결할 것을 권장합니까?

+0

음, 자식 프로세스의 수를 줄이십시오. – arkascha

+0

@arkascha MaxClients와 ServerLimit이 1000보다 작 으면 방문시 사이트가 매우 느리게됩니다. 최대 20 초까지 열 수 있습니다. –

+0

그렇다면 시스템이로드에 충분히 강력하지 않을 가능성이 높습니다. – arkascha

답변

1

방금 ​​비슷한 질문에 대답했습니다. Check this link. 여기에 내가 제안 내용은 다음과 같습니다

내가 EC2의 인스턴스와 비슷한 문제를 가지고 있었고, 여기에 내가 무슨 짓을했는지 및 제안 :

  1. 당신이 prefork의를 사용하는 경우는, 모듈이 입력에 의해로드되어 있는지 확인 이 두 명령 httpd -lsudo httpd -M 이 두 명령 중 하나의 결과에로드 된 프리프 모듈을 볼 수 있으면 다음 단계로 넘어갑니다. 그렇지 않으면 먼저로드해야합니다. 그렇지 않으면 구성을 변경하지 않습니다.

  2. 실행이 명령은 sudo service httpd restart를 사용하여 아파치 서버를 다시 시작하고 당신이 얼마나 많은 메모리를 기록해을

    x

  3. 가치를 각각의 아파치 프로세스가 ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg)/NR;} END {print avg " MB";}' 전화를 사용하는 평균 메모리를 찾을 수 있습니다. 내가 한 일은 나중에 사용하기 위해 무료 메모리에서 여분의 200MB-500MB 쿠션을 빼는 것입니다. 공정 x 당 사용 된 메모리의 양을 통해 그 값 y

  4. 나누기 무료로 메모리 y의 값을 호출하고 그 MaxConnectionsPerChild의 값에 대한 다음까지를 조정할 수로 MaxRequestWorkers = y/x

  5. 의 값이 될 것이다 당신은 올바른 구성을 얻을 수 있습니다. 그것을 너무 크게 만들면, 프로세스는 죽기 전에 점점 더 많은 메모리를 계속 사용하게 될 것입니다. 너무 작게 만들면 프로세스가 너무 빨리 종료되어 시스템에 오버 헤드가 발생합니다. 나는 대체로 400010000 사이의 어딘가에 보관합니다.

  6. 이러한 단계 중 일부는 다음 링크의 허용 대답에서 가져 왔습니다. StackExchange: httpd memory usage 하나의 솔루션은 필요하지 않은 경우 모듈 일부를 비활성화 할 것을 제안했습니다.

  7. 액세스 로그를 확인하십시오. 누군가 귀하의 웹 사이트를 공격하려 할 수 있습니다!

먼저 1-5 단계를 수행하여 문제가 해결되는지 확인하십시오.

행운을 빈다.