서버에 이상한 문제가 발생했습니다. (Debian 8.9) PHP 애플리케이션인 API가 있습니다. 별도의 서버에 있는 Elasticsearch 인스턴스를 요청합니다.
2시간마다 오류 500이 발생하는데, 이 오류는 1~2분 정도 지속되며 더 이상 지속되는 경우는 거의 없습니다.
[2017-10-19 20:52:10] +2 hours
[2017-10-19 22:51:59] +2 hours
[2017-10-20 00:52:02] +2 hours
[2017-10-20 02:52:14] +2 hours
[2017-10-20 04:52:28] +2 hours
때로는 +4시간 또는 +6시간이 될 때도 있습니다.
오류 세부정보는 다음과 같습니다.
request.CRITICAL: Uncaught PHP Exception Elastica\Exception\Connection\HttpException:
"Operation timed out"
이것은 매우 분명합니다. API는 http 클라이언트가 지정한 제한 시간에 도달할 때까지 elasticsearch 인스턴스에 연결을 시도합니다.
이 문제의 원인은 무엇입니까? 이러한 문제가 발생하면 어떻게 디버깅합니까?
물론 나중에 모든 URL 참조를 확인하면 모든 것이 잘 작동합니다.
답변1
커널에서 somaxconn 매개변수를 늘리는 것이 좋습니다.
다음에 추가 /etc/sysctl.conf
:
net.core.somaxconn=512
그런 다음 다음을 실행하십시오.
sudo sysctl -p
또한 다음과 같은 /etc/redis.conf
레이즈에서도 :tcp-backlog
tcp-backlog 512
Redis 구성 파일에서 다음을 수행합니다.
TCP Listen() 백로그.
초당 요청 수가 많은 환경에서는 느린 클라이언트 연결 문제를 방지하려면 더 높은 백로그가 필요합니다. Linux 커널은 이를 /proc/sys/net/core/somaxconn 값으로 자동으로 자르므로 원하는 효과를 얻으려면 somaxconn 및 tcp_max_syn_backlog를 모두 늘려야 합니다.