Networking

什麼會導致 Memcached 掛起 2 秒以上?

  • September 11, 2018

我要瘋了,試圖擴展 memcached。從他們的網站:

Memcached 操作幾乎都是 O(1)。連接到它並發出 get 或 stat 命令永遠不會滯後。如果連接滯後,您可能會達到最大連接數限制。有關要監視的統計資訊的詳細資訊,請參閱 ServerMaint。

如果發出命令滯後,您可能會遇到許多調整問題。最常見的是硬體問題、RAM 不足(交換)、網路問題(頻寬、丟包、半雙工連接)。在極少數情況下,作業系統錯誤或 memcached 錯誤可能會造成影響。

嗯.. 對我來說,它肯定不像 O(1) 操作那樣執行。在我們網站的低負載到正常負載下,獲取和設置操作的 memcached 響應時間約為 0.001 秒。不錯。但是,如果我們將負載增加三倍,我們會得到需要 100 倍(或在極少數情況下為 1000 倍!)的異常值。我什至有一個實例,memcached 儲存一個值需要 2.2442 秒。

顯然,這正在扼殺我們的網站。

這是 Memcached->getStats 在慢速時期之一的輸出:

       [pid] => 18079
       [uptime] => 8903
       [threads] => 4
       [time] => 1332795759
       [pointer_size] => 32
       [rusage_user_seconds] => 26
       [rusage_user_microseconds] => 503872
       [rusage_system_seconds] => 125
       [rusage_system_microseconds] => 477008
       [curr_items] => 42099
       [total_items] => 422500
       [limit_maxbytes] => 943718400
       [curr_connections] => 84
       [total_connections] => 4946
       [connection_structures] => 178
       [bytes] => 7259957
       [cmd_get] => 1679091
       [cmd_set] => 351809
       [get_hits] => 1662048
       [get_misses] => 17043
       [evictions] => 0
       [bytes_read] => 109388476
       [bytes_written] => 3187646458
       [version] => 1.4.13

所以到目前為止我排除的事情是:

  • 達到最大連接數限制(curr_connections84 遠低於預設的最大值 1024)
  • 交換 - 機器在 1024M 記憶體中有 900M 專用於專用機器上的 memcached。根據統計數據,它似乎只使用了大約 7MB 的數據bytes

我將如何診斷其他硬體問題?prstat 在 CPU 或記憶體使用方面並沒有真正顯示出很多情況。不知道如何找出網路問題,但由於這是與網路盒在同一專用網路上的專用伺服器,我認為這不是連接問題(ping盒子之間的時間不到一毫秒)。

還有什麼我在這裡想念的嗎?它快把我逼瘋了。

編輯:還忘了提到我已經嘗試了持久和非持久連接,影響最小甚至沒有。

如果 Memcached 使用交換記憶體,它的性能會顯著下降。如果您注意到伺服器上正在使用交換記憶體,您可以嘗試使用該-k選項啟動 memcached。

來自:http ://code.google.com/p/memcached/wiki/NewHardware#Avoid_Swapping

避免交換

將物理記憶體(額外增加百分之幾)分配給 memcached 伺服器。不要過度分配記憶體並期望交換可以節省您的時間。性能會非常非常差。如果您的伺服器正在使用交換,請特別注意監控,並在必要時進行調整。

我將作業系統從 SmartOS 更改為 Ubuntu,問題似乎得到了解決。不知道為什麼,但這似乎是 memcached 和作業系統之間的問題。

引用自:https://serverfault.com/questions/374016