Debian

API 和 elasticsearch 伺服器之間每 2 小時超時一次

  • November 14, 2017

我們的伺服器上遇到了一個奇怪的問題。(Debian 8.9) 我們有一個 API,它是一個 PHP 應用程序。它請求彈性搜尋,哪個實例在單獨的伺服器上。

每 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 會嘗試連接到 elasticsearch 實例,直到達到 http 客戶端的指定超時時間。

什麼可能導致這種情況?如何調試此類問題?

當然,稍後檢查所有 URL 的引用者時,一切正常。

他們終於設法找到了問題所在。根本原因是完全愚蠢的。事實上,es 集群的監控視圖向 es 發送了很多查詢。大約是應用程序本身的 6 倍!

es 反日誌

正如您每 2 小時看到的那樣,記憶體太高,伺服器在幾分鐘內不可用,直到它清除記憶體(垃圾收集器)。

其他參數也被優化和/或增加。

我建議在核心中提高 somaxconn 參數。

添加到/etc/sysctl.conf

net.core.somaxconn=512

然後執行:

sudo sysctl -p

同樣在/etc/redis.confraisetcp-backlog中(或更多):

tcp-backlog 512

從 redis 配置文件:

TCP 偵聽()積壓。

在每秒請求數較高的環境中,您需要大量積壓,以避免客戶端連接緩慢的問題。請注意,Linux 核心會默默地將其截斷為 /proc/sys/net/core/somaxconn 的值,因此請確保同時提高 somaxconn 和 tcp_max_syn_backlog 的值以獲得所需的效果。

引用自:https://unix.stackexchange.com/questions/399940