1. 程式人生 > >filebeat實踐-記憶體佔用-最大記憶體佔用

filebeat實踐-記憶體佔用-最大記憶體佔用

https://yq.aliyun.com/articles/241161

filebeat作為日誌採集agent, 是需要部署到生產伺服器上的.不理解filebeat的工作機制,不瞭解filebeat在實際生產使用中的記憶體使用將會給你帶來意想不到的麻煩.

有些文章說filebeat記憶體消耗很少,不會超過100M, 這簡直是不負責任的胡說,假如帶著這樣的認識把filebeat部署到生產伺服器上就等著哭吧.

filebeat在空載情況(沒有日誌可採集)下的確不會有大的記憶體開銷,但在有大量的日誌需要採集時,filebeat的記憶體佔用是沒有固定值的, 那有沒有理論值呢?答案是有, 為啥這麼說,看下面公式:

                              bytes_each_log * spool_size * M + a*N

其中, bytes_each_log是單條日誌大小, spool_size是配置檔案裡配置項,  M是單條日誌在記憶體裡的溢價係數(>1), N表示採集的檔案個數,a為常數.

spool_size的預設值是2048, 好多人估計都不會配置這個項,也會因此埋下禍根(OOM):

1240
10MB為filebeat支援的單條日誌最大長度,超過的將會被截斷丟棄

假設忽略a*N部分的記憶體開銷, 單條日誌的記憶體溢價為3, 一旦出現單條日誌大於50KB且有瞬間爆發量的時候, filebeat的記憶體佔用將大於300MB,是不是有點嚇人!如果出現了極端情況,單條日誌>10M,即使filebeat會截斷到10M那也是20GB!!是不是腿都軟了!!!

filebeat在實際使用過程中記憶體>300M,甚至15GB的情況浣熊都遇到過, 記憶體超過300M幾乎經常遇到,基本都是因為客戶沒有按照吩咐的去做導致的; 15GB的那次有點意外和驚喜, 客戶在自己的日誌檔案裡打了大量的二進位制檔案(後來知道真相的我眼淚掉下來...), 大量的二進位制檔案觸發了10MB規則,還好吃掉15GB記憶體後filebeat因OOM退出了,沒有帶來嚴重的損失.

那怎麼樣才能避免以上記憶體災難呢?劃重點了,快快拿出小本本記錄:

(1)每個日誌生產環境生產的日誌大小,爆發量都不一樣, 要根據自己的日誌特點設定合適的spool_size值;什麼叫合適,至少能避免記憶體>200MB的災難;

(2)在不知道日誌實際情況(單條大小,爆發量), 務必把spool_size設定上,建議128或者256;

最後分享張實踐圖片:

        單條日誌為45KB, spool_size為2048的記憶體開銷,陡坡下是spool_size調整為128的效果.

1240

相關推薦

filebeat實踐-記憶體佔用-記憶體佔用

https://yq.aliyun.com/articles/241161 filebeat作為日誌採集agent, 是需要部署到生產伺服器上的.不理解filebeat的工作機制,不瞭解filebeat在實際生產使用中的記憶體使用將會給你帶來意想不到的麻煩. 有些文章

linux查詢消耗cpu最高的執行緒(jstack),記憶體佔用執行緒(jmap),執行緒gc情況(jstat)

1.linux下    top  命令查詢查詢消耗cpu最高的程序id 2. 將程序資訊匯出到日誌檔案中   ./jstack 程序id >stack.log 3.查詢程序id下消耗cpu最高的執行緒id  top -Hp  程序id               執行

解決oracle11g的記憶體佔用

個人使用oracle時難免會遇到記憶體太大,影響到計算機效能,那麼可以根據自身需求降低記憶體的最大佔用 開啟oracle自帶的sqlplus SQL> conn sys/密碼 as sysdba 已連線。 SQL> show paramete

一張100px*100px的圖片在記憶體中會佔用記憶體

    轉: http://www.cnblogs.com/YuangPong/p/6694512.html   在實際開發當中我們經常會忽視如題問題,只是知道圖片越小越好,甚至根本不知道如何計算,今天筆者就拋磚引玉一把!   Android中一張圖片(Bitmap)

百度開源分散式id生成器uid-generator原始碼剖析 偽共享(false sharing),併發程式設計無聲的效能殺手 一個Java物件到底佔用記憶體? 寫Java也得了解CPU--偽共享

百度uid-generator原始碼 https://github.com/baidu/uid-generator   snowflake演算法 uid-generator是基於Twitter開源的snowflake演算法實現的。 snowflake將long的64位分為了3部分,時間戳、

百度uid-generator原始碼 偽共享(false sharing),併發程式設計無聲的效能殺手 一個Java物件到底佔用記憶體? 寫Java也得了解CPU--偽共享

https://github.com/baidu/uid-generator   snowflake演算法 uid-generator是基於Twitter開源的snowflake演算法實現的。 snowflake將long的64位分為了3部分,時間戳、工作機器id和序列號,位數分配如下。

一個物件佔用記憶體

物件頭 物件頭在32位系統上佔用8bytes,64位系統上佔用16bytes。 例項資料 原生型別(primitive type)的記憶體佔用如下: Primitive Type Memory Required(bytes) boolean 1 byte 1 short 2 char

一個Java物件到底佔用記憶體

在進行 JVM 調優時,我們經常關注 JVM 各個區域大小以及相關引數,從而進行特定的優化,在一次排查記憶體溢位問題時我不禁想到一個問題,一個 Java 物件到底佔用多大記憶體?下面我們就來分析驗證下。 Java 物件記憶體結構 在 JVM 中,Java 物件都是在堆記憶體上分配的,想要分析出 Java

高端面試必備:一個Java物件佔用記憶體

這個問題一般會出現在稍微高階一點的 Java 面試環節。要求面試者不僅對 Java 基礎知識熟悉,更重要的是要了解記憶體模型。 #### Java 物件模型 HotSpot JVM 使用名為 oops (Ordinary Object Pointers) 的資料結構來表示物件。這些 oops 等同於本地

32位模式下C/C++程式可用記憶體

 由於在32位處理器架構下,對記憶體的訪問限制在4GB以下的空間。為了突破 4GB的限制,現在的32位至強處理器採用一種叫PAE(實體地址擴充套件)的技術,來實現對超出4GB空間的實體地址的訪問。PAE實際上採用了36位的地址匯流排,這樣理論上可以支援64GB記憶體空間的定址。  PAE使得處理器可以支援訪問

如何檢視程式可使用的記憶體記憶體使用情況

當載入帶有大量圖片的列表時,通常我們都要考慮到圖片達到一定上限時,記憶體不足引發OOM導致程式崩潰的問題。下一步也許就是去找個圖片載入開源框架來一勞永逸。OOM不急著解決,先來了解下關於程式可用記憶體

sql server 效能調優之 邏輯記憶體消耗資源分析1 (自sqlserver服務啟動以後)

原文: sql server 效能調優之 邏輯記憶體消耗最大資源分析1 (自sqlserver服務啟動以後) 一.概述   IO 記憶體是sql server最重要的資源,資料從磁碟載入到記憶體,再從記憶體中快取,輸出到應用端,在sql server 記憶體初探中有介紹。在明白了sqlserver記憶體原

Android應用程式的預設記憶體值以及修改

Android應用程式的預設最大記憶體值為16M,不同的手機版本和型號有所不同. 有些應用程式可能會出現記憶體溢位,譬如: ERROR/AndroidRuntime(264): java.lang.OutOfMemoryError: bitmap size ex

Windows Server 2008記憶體限制

from:  http://blog.sina.com.cn/s/blog_732ae6130100uk1d.html Windows Server 2008 x86 Windows Server 2008 標準版,支援最大 4GB 記憶體 Windows Server 2008 企業版,支援最大64GB

在linux下統計程式的記憶體使用情況

在記憶體的使用中,有程式本身所佔的記憶體。也有程式動態分配的記憶體。裡面還可能是系統呼叫外部的工具,又會佔用了額外的記憶體。從使用者角度來看,可以認為裡面是個黑盒子。啟動了一個程式,卻不知道該程式的峰值記憶體使用量。 用什麼方法來知道最多使用了多少記憶體呢?其

32位系統的虛擬記憶體空間容量

表示32位系統的記憶體地址有32位,即4位元組(表示64位系統的記憶體地址有64bit,即8位元組)pow(2,32)bitpow(2,32)/8Bpow(2,32)/8/1024KBpow(2,32)/8/1024/1024Mpow(2,32)/8/1024/1024/10

malloc記憶體申請量

#include <stdio.h> #include <stdlib.h> unsigned maxinum = 0; int main() {     unsigned blocksize[] = {1024 * 1024,1024,1};  

linux修改POSIX訊息佇列(msgqueue)的各項限制(記憶體、msg_max、msgsize_max、queues_max)

1.進入 目錄 /proc/sys/fs/mqueue/,檢視各項訊息佇列的預設max設定: [[email protected] ~]# ls -l /proc/sys/fs/mqueue/ total 0 -rw-r--r-- 1 root root 0 Au

JVM系列:解決JVM記憶體設定問題

你知道JVM記憶體最大能調多大嗎,這裡和大家分享一下JVM最大記憶體方面的內容,Java虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在Java虛擬機器啟動時建立的。 JVM記憶體最大能調多大 今天分析了當前比較流行的幾個不同公司不同版

java檢視記憶體設定

 java -Xmx1444m -version   測試出來是這麼多.到了1500時顯示 C:/Documents and Settings/Administrator>java -Xmx1024m -version java version "1.6.0_19" J