kafka 0.9版本堆外記憶體溢位
1、背景
線上kafka是0.9版本,最大堆記憶體1G。
從server.log看到,java.lang.OutOfMemoryError: Direct buffer memory,是堆外記憶體溢位了。
加大堆外記憶體,過一段時間還是堆外記憶體溢位。
2、原因分析
猜測應該是禁用了手動 GC 導致的,同事升級kafka版本到1.0,沒有再重現過。我看了kafka 0.9版本的啟動指令碼,確實禁用了手動GC(-XX:+DisableExplicitGC)。
申請堆外記憶體的時候,會呼叫System.gc();,-XX:+DisableExplicitGC 會導致 System.gc(); 失效,然後就記憶體溢位了。
3、解決方案
a.升級kafka版本到1.0,
b.或者去掉-XX:+DisableExplicitGC,如果使用ConcurrentMarkSweep(CMS)垃圾回收器,可以改成 -XX:+ExplicitGCInvokesConcurrent,把FullGC變成併發的。
4、思考
kafka作為全球著名的開源軟體,也存在過這樣的問題,說明偉大的軟體也是一步一步進化的。
勇敢的參與到開源大潮中去吧,我輩也可以添磚加瓦,並從中學習進步。
相關推薦
kafka 0.9版本堆外記憶體溢位
1、背景線上kafka是0.9版本,最大堆記憶體1G。從server.log看到,java.lang.OutOfMemoryError: Direct buffer memory,是堆外記憶體溢位了。加大堆外記憶體,過一段時間還是堆外記憶體溢位。2、原因分析猜測應該是禁用了手
tsync堆外記憶體溢位排查經過
一、發生得問題 tsync服務總是莫名得宕機,java程序被莫名其妙的消失了。 二、查詢問題 當時看了系統日誌: sudo -u admin dmesg|grep -A20 kill screenshot 發現是oom了,記憶體不足被系統kill掉了。 當時懷疑有可能是堆內記憶體溢位,
Java堆外記憶體溢位問題排查,top命令下java服務res值上升
前幾天寫了一套java服務用於對接視訊單位的sdk介面,但是專案環境測試的時候出現了問題: 在linux環境下使用top命令檢視java命令的mem比值一直在緩慢的增加,第二天出現了服務宕機的情況,生成hs_err的log
記錄一次堆外記憶體溢位
注:其實問題並不是由我排查的,只是想記一下思路,來推動自己的進步 # 問題描述: 一個使用kafka進行流處理的專案不斷髮生 oom 被系統kill掉的情況 # 分析排查 1. 剛開始的時候專案啟動時並沒有指定初始堆記憶體,先假設是因為堆記憶體使用過大導致系統記憶體使用100%而被kill掉 問題
基於Kafka 0.9版本 使用ACL進行許可權控制
kafka附帶一個可插拔的認證,並使用zookeeper來儲存所有的acl。kafka的acl在一般格式定義"Principal P is [Allowed/Denied] Operation O From Host H On Resource R”,你可以閱讀更多關於KIP-11的結構,為了新增,刪除或列
從0到1起步-跟我進入堆外記憶體的奇妙世界
堆外記憶體一直是Java業務開發人員難以企及的隱藏領域,究竟他是幹什麼的,以及如何更好的使用呢?那就請跟著我進入這個世界吧。 一、什麼是堆外記憶體 1、堆內記憶體(on-heap memory)回顧 堆外記憶體和堆內記憶體是相對的二個概念,其中堆內
Kafka 0.9 新版本consumer客戶端使用介紹
kafka最初時開發時, 所帶的producer和consumer client都是Scala所寫. 我們逐漸發現這些API具有一些限制. high-level的api支援consumer groups和故障轉移, 但是不支援許多複雜的使用場景, 同時還有一
從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數
記憶體洩漏 記憶體洩漏是指程式在申請記憶體後,無法釋放已申請的記憶體空間,無用物件(不再使用的物件)持續佔有記憶體或無用物件的記憶體得不到及時釋放,從而造成記憶體空間的浪費。記憶體洩漏最終會導致OOM。 造成記憶體洩漏典型場景: 1. 單例模式的不正確使用單例物件在初始化後將在JVM的整個生命週期中以靜態變數
Kafka 0.11版本新功能介紹 —— 空消費組延時rebalance
次數 新功能 ins 效果 可控 size style soft font 在0.11之前的版本中,多個consumer實例加入到一個空消費組將導致多次的rebalance,這是由於每個consumer instance啟動的時間不可控,很有可能超出coordinato
Apache Kafka 0.11版本新功能簡介
多個 spa 實現 cer true assign 線程 cto headers Apache Kafka近日推出0.11版本。這是一個裏程碑式的大版本,特別是Kafka從這個版本開始支持“exactly-once”語義(下稱EOS, exactly-once semant
【從0開始Tornado建站】0.9版本號python站點代碼開源--持續更新中
分享 body clas .com tis https -m SM 。。 ? ? ? ? 從5月份開始【從0開始Tornado建站】這個專欄,開始一點一點把這個分類
大資料學習之路97-kafka直連方式(spark streaming 整合kafka 0.10版本)
我們之前SparkStreaming整合Kafka的時候用的是傻瓜式的方式-----createStream,但是這種方式的效率很低。而且在kafka 0.10版本之後就不再提供了。 接下來我們使用Kafka直連的方式,這種方式其實是呼叫Kafka底層的消費資料的API,我們知道,越底層的東
關於JVM堆外記憶體的一切
Java中的物件都是在JVM堆中分配的,其好處在於開發者不用關心物件的回收。但有利必有弊,堆內記憶體主要有兩個缺點:1.GC是有成本的,堆中的物件數量越多,GC的開銷也會越大。2.使用堆內記憶體進行檔案、網路的IO時,JVM會使用堆外記憶體做一次額外的中轉,也就是會多一次記憶體拷貝。 和堆內記憶體相對應,堆
Netty堆外記憶體洩露排查與總結
導讀 Netty 是一個非同步事件驅動的網路通訊層框架,用於快速開發高可用高效能的服務端網路框架與客戶端程式,它極大地簡化了 TCP 和 UDP 套接字伺服器等網路程式設計。 Netty 底層基於 JDK 的 NIO,我們為什麼不直接基於 JDK 的 NIO 或者其他NIO框架: 使用 JDK 自
Java堆外記憶體使用
JVM內部會把所有記憶體分成Java使用的堆記憶體和Native使用的記憶體,它們之間是不能共享的,就是說當你的Native記憶體用完了時,如果Java堆又有空閒記憶體,這時Native會重新向Jvm申請,而不是直接使用Java堆記憶體。 使用堆外記憶體,就是為了能直接分配和釋放記憶體,提高
Java——堆外記憶體詳解
記憶體是好東西,我們常聽堆記憶體,很多人卻不知道還有一個堆外記憶體。 那這兩個都是個啥玩意呢?且讓本帥博主今天給你好好說道說道。 一、堆內記憶體 那什麼東西是堆記憶體呢?我們來看看官方的說法。 “Java 虛擬機器具有一個堆(Heap),堆是執行時資料區域,所
堆外記憶體的回收機制分析
1.堆外記憶體 JVM啟動時分配的記憶體,稱為堆記憶體,與之相對的,在程式碼中還可以使用堆外記憶體,比如Netty,廣泛使用了堆外記憶體,但是這部分的記憶體並不歸JVM管理,GC演算法並不會對它們進行回收,所以在使用堆外記憶體時,要格外小心,防止記憶體一直得不
Spark 堆外記憶體
轉自:https://blog.csdn.net/bitcarmanlee/article/details/78793823 1.堆外記憶體有哪些 前面提到spark中的堆記憶體溢位,除了堆記憶體,還有堆外記憶體。該部分記憶體主要用於程式的共享庫、Perm Space、 執行緒Stack和一
spring boot 引起的 “堆外記憶體洩漏”
spring boot 引起的 “堆外記憶體洩漏” 背景 組內一個專案最近一直報swap區域使用過高異常,筆者被叫去幫忙檢視原因。 發現配置的4G堆內記憶體,但是實際使用的實體記憶體高達7G,確實有點不正常,JVM引數配置是“-XX:MetaspaceSize=2
JdbcTemplate 0.9版本原始碼分析
JdbcTemplate 核心方法: public void query(PreparedStatementCreator psc, RowCallbackHandler callbackHandler) throws DataAccessException {