1. elasticsearch-運維-文件緩存
伺服器上部署了ES5集群,通過zabbix監控發現cpu load呈鋸齒狀,且ES所在磁碟iops read和cpu load有一樣的鋸齒,可證明ES周期性的發生大量讀磁碟操作。通過分析,ES周期性大量讀磁碟是因為QA每10分鍾發起搜索業務請求
此外,該機器上有marathon超賣內存的情況存在,當關閉超賣的服務時,iops read及cpu load監控正常
按理說QA監控發起的搜索請求不會畝旦昌變化,ES應該有索引文件緩存。所以首先分析ES索引文件緩存的情況
通過/proc/$pid/smaps可查看進程內存分布及映射情況,如下圖所示,size表示通過mmap映射的文件的大小,Rss表示該文件mmap實際內存的大小,Pss表示當某個文件被多個進程同時使用時,平均每個進程佔用的內存大小
寫個腳本,分析一下文遲巧件緩存使用情況:
索引5s96iIBfS6KivdgDrb8u-Q映射文件大小為44.3g,實際佔用物理內存838M,對比其他伺服器同索引文件緩存使用情況發現,大於該機器佔用的物理內存(2.1g 對比 838M)
通過監控ES進程的smaps文件發現當cpu飆升即搜索請求時,文件緩存佔用高達2-3G,請求完成一段時間後文件緩存將至700-800M,此時可判定是因為文件緩存被系統踢掉導致頻繁發生磁碟io
通過分析源碼可知ES使用MMapDirectory打開索引文件,其內部FileProvider調用C庫的mmap函數打開文件,所以是由系統託管文件緩存
為何操作系統會踢掉ES文件緩存?猜測是因為marathon超賣導致內存使用過多,操作系統需要回收文件緩存,而QA監控又是10分鍾請求一次,導致ES無法持有文件緩存
通過調整操作系統內核參數vm.vfs_cache_pressure(100 => 80)來讓操作系統盡量少回收文件緩存,調整後相關監控如下
ES節點內存維持較之前提升至少500M
通過監控分析smaps文件能獲取各索引文件物理內存佔用情況,發生堆外內存異常時可排查是哪些索引文件導致的,即可大致推斷是什麼業務什麼類型的查迅扒詢
heap內存可以使用jhat、jmap分析使用情況
匿名頁緩存可在jvm啟動參數加上-XX:NativeMemoryTracking=[off|summary|detail]後,通過jcmd $pid VM.native_memory detail分析
2. ES文件瀏覽器永久會員可以存儲多少文件
最大256GB的儲存空間。ES文件瀏覽器是一個能管理移動設備、區域網共享、遠程FTP、藍牙設備和雲存儲的系統工具類移動軟體。不管是圖片、音樂,還是視頻、文檔都能夠統一管理,清楚明了的分類,超高的內存儲存空間,讓你手機文件不再亂七八糟。
3. Elasticsearch 能夠存儲的數據量一般有多大
單獨看ES能玩多大數據意義不大,具體實踐中往往因為各種業務要求而無法繼續增加數據量。目大的方面考慮有如下幾點:
1、查詢速度。ES可以支持的查詢類型多種多樣,單一的term匹配,復雜的historm agg,甚至父子文檔模式下bool查詢之後繼續做文本高亮,數據量越大查詢時間越長。如果只是簡單的把數據寫進去然後按照ID獲取數據,那就盡管往裡面寫數據吧。
2、寫入速度。數據量越大,寫入速度受影響的可能性越大。業務要求1小時的數據1小時內必須寫完,如果做不到就得考慮分索引或者分集群了。
3、更新速度。同上,更新比單純的寫入操作更多,先get再merge再overwrite到es。
4、其他因素。
目前我遇到的ES集群,有1.5T-2T索引量的情況下,需要支持平均查詢在500ms以內的高並發高亮查詢。在我們的場景下這個量級不算小了。
4. es的三種緩存
也稱filter cache,作用是對消碧一個查詢中包含的過濾器執行結果進行緩存,滿足了term, range過濾器的clause會被緩存(5.1.1版本term被 取消了 ),bool不會被緩配橋鬧存,但是bool過濾器包含的子term會被緩存。
curl "http://$HOST/_nodes/stats/indices/query_cache,request_cache,fielddata?pretty&human"
當一個查詢發送到es cluster的某個節點上時,這個節點會把該查詢擴散分發到其餘節點,並在相應分片上執行,將分片上執行的結果成為「本地結果集」。這些本地結果集最終會匯集到最初請求到達的那個協調節點,這些「分片級」的「本地結果集」會合並成「全局結果集「。query-and-fetch裡面的query過程。request cache就是緩存這些」分片級本地結果集「的。但是request cache在每次refresh_interval後就會被清空,所以其生命培罩周期是一個refresh_interval。(個人感覺不需要開啟)
field data與doc_values作用一樣,都是讓我們在inverted index倒排索引的基礎上做aggregation統計、sort排序。