2시간마다 API와 Elasticsearch 서버 간의 시간 초과

2시간마다 API와 Elasticsearch 서버 간의 시간 초과

서버에 이상한 문제가 발생했습니다. (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를 모두 늘려야 합니다.

답변2

그들은 마침내 문제를 발견했습니다. 근본적인 이유는 완전히 바보입니다. 실제로 ES 클러스터의 모니터링 뷰는 ES로 수많은 쿼리를 보낸다. 앱 자체 크기의 약 6배!

es 트랜스 로그

보시다시피, 2시간마다 메모리가 너무 높아져 메모리가 지워질 때까지(가비지 수집기) 몇 분 동안 서버를 사용할 수 없게 됩니다.

다른 매개변수도 최적화 및/또는 증가되었습니다.

관련 정보