![Apache가 모든 요청에 응답하지 않습니다](https://rvso.com/image/632734/Apache%EA%B0%80%20%EB%AA%A8%EB%93%A0%20%EC%9A%94%EC%B2%AD%EC%97%90%20%E2%80%8B%E2%80%8B%EC%9D%91%EB%8B%B5%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
설정: 내 서버에 접속하는 휴대폰이 약 100만 개 이상 있습니다.
서버는 괜찮아 보이네요. CPU와 RAM이 모두 많음 - CPU는 시간의 약 90% 동안 유휴 상태입니다. (1)
데이터베이스에 많은 로드가 발생하지 않습니다. 초당 요청 수가 100개 미만입니다(2).
"Android Lost"와 같은 Apache 프록시를 통해 서버에 접속하면 시간 초과가 발생합니다.
포트 8080에서 직접 애플리케이션 서버에 접속하면 즉시 응답을 받습니다.
지금까지 내가 한 일은 다음과 같습니다.
- 모든 서비스, 데이터베이스, Apache, 부두를 다시 시작하십시오.
- 서버를 재부팅했습니다
- Apache 대신 nginx 설치를 시도했습니다. (3)
- 포트 80에서 Jetty를 실행하고 Apache를 건너뛰어 보았습니다.
- 서버 설정을 조정해 보았습니다. (4)
나에게는 엄청난 양의 요청이 서버에 도달하려고 시도하고 있으며 Apache 어딘가에 설정해야 할 제한이 있는 것처럼 들립니다.
따라서 어떤 힌트나 제안이라도 주시면 감사하겠습니다.
기원 후. 1:
top - 20:44:33 up 44 min, 2 users, load average: 2.44, 1.86, 2.80
Tasks: 165 total, 2 running, 163 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.0%us, 0.4%sy, 0.0%ni, 90.6%id, 7.5%wa, 0.0%hi, 0.5%si, 0.0%st
Mem: 12296928k total, 12154152k used, 142776k free, 83228k buffers
Swap: 6287292k total, 0k used, 6287292k free, 10461776k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
447 root 20 0 7587m 841m 14m S 9 7.0 0:39.81 java
1287 mongodb 20 0 120g 272m 247m S 3 2.3 1:38.12 mongod
10 root 20 0 0 0 0 S 0 0.0 0:07.57 rcu_sched
364 root 0 -20 0 0 0 S 0 0.0 0:00.96 kworker/0:1H
381 www-data 20 0 1966m 8188 2164 S 0 0.1 0:00.72 apache2
15562 root 20 0 7706m 105m 11m S 0 0.9 0:13.56 java
32636 www-data 20 0 1966m 8012 2236 S 0 0.1 0:00.72 apache2
기원 후. 2:
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn time
3 17 2 0 0 6 0 58.2g 120g 293m 11 1.7 0 0|0 0|0 3k 9k 43 20:49:40
11 46 8 0 0 24 0 58.2g 120g 295m 6 5.1 0 0|0 0|0 12k 21k 43 20:49:41
12 63 13 0 0 26 0 58.2g 120g 294m 3 1.3 0 0|0 0|0 17k 35k 43 20:49:42
5 45 6 0 0 12 0 58.2g 120g 296m 6 0.9 0 0|1 2|1 13k 22k 43 20:49:43
5 49 5 0 0 11 0 58.2g 120g 298m 5 0.1 0 0|0 0|0 13k 22k
기원 후. 삼:
nginx 오류 로그에서:
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
기원 후. 4:
http://www.eclipse.org/jetty/documentation/current/high-load.html#d0e14090
답변1
이는 nginx에 충분한 작업자 연결이 없기 때문입니다. nginx 오류 로그에서 확인할 수 있습니다.
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
2014/05/12 19:45:51 [alert] 9800#0: 768 worker_connections are not enough
nginx가 제공할 수 있는 최대 클라이언트 수는 다음 공식으로 계산됩니다.
max_clients = worker_processes * worker_connections - keepalive connections
에서 및 nginx.conf
의 양을 설정할 수 있습니다 . 이는 일반적으로 기본 구성 파일의 상단( 지시문 전)에 있습니다.worker_processes
worker_connections
http
worker_processes 1;
events {
worker_connections 128
}
당신은 아마도 이러한 세트를 가지고 있을 것입니다. 보유한 CPU 코어 수를 설정하고 서버가 처리할 수 있거나 처리해야 하는 수를 찾을 때까지 서버 성능을 확인하면서 worker_processes
값을 늘리는 것이 좋습니다 .worker_connection