Oracle 19.20未知BUG導致oraagent進程內存泄漏

故障現象

查詢操作系統進程的使用排序,這里看到oraagent的物理內存達到16G,遠遠超過正常環境(正常環境在19.20大概就是100M多一點)

[root@orastd tmp]# ./hmem|more
PID      NAME                     VIRT(kB)   SHARED(kB)      RSS(kB)  PRIVATE(kB)
2102     oraagent.bin             18212328        47160     16215456     16215456

數據庫版本

獲得數據庫的版本為19.20

[grid@orastd trace]$ $ORACLE_HOME/OPatch/opatch lspatches35332537;ACFS RELEASE UPDATE 19.20.0.0.0 (35332537)
35320081;Database Release Update : 19.20.0.0.230718 (35320081)
33575402;DBWLM RELEASE UPDATE 19.0.0.0.0 (33575402)

分析過程

獲得內存使用詳細信息

獲得內存的詳細信息

[root@orastd tmp]# ./hmem -l|more
PID      NAME                     VIRT(kB)   SHARED(kB)      RSS(kB)  PRIVATE(kB)    RssAnon    RssFile   RssShmem      VmRSS     VmData
2102     oraagent.bin             18212328        47160     16215456     16215456   16168296      47160          0   16215456   17850384

RssAnon標識進程的私有內存,常住在內存中,其實可以理解為DATA部分的內存,這里可以肯定oraagent存在內存泄漏了。

查看oraagent日志

oraagent部分一直不斷的在重復顯示下面內容,這里面有個奇怪的現象就是ora.LISTENER.lsnr,但是我集群中并沒有這個資源

2025-07-24 23:04:11.272 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateEndPoints 2040 Listener ResName:ora.LISTENER.lsnr
2025-07-24 23:04:11.272 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateHostName entry lsnrResName:ora.LISTENER.lsnr
2025-07-24 23:04:11.272 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::getLsnrResNameAddrType &s_lsnrResNametoAddrTypeXLock:0x55555a209718get resname:ora.LISTENER.lsnr addressType
2025-07-24 23:04:11.272 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::getAddressTypeValue 000 entry { actx:(nil) lsnrName:ora.LISTENER.lsnr
2025-07-24 23:04:11.277 : USRTHRD:3858700032: [     INFO] {0:0:2} Agent::getValueFromNetwork 000 { get netParam:ADDRESS_TYPE from vipResName: defaultNetRes: tag:
2025-07-24 23:04:11.277 : USRTHRD:3858700032: [     INFO] {0:0:2} Agent::getValueFromNetwork 999 } netParam:ADDRESS_TYPE vipResName: defaultNetRes: networkResName: netParamValue:IPV4
2025-07-24 23:04:11.277 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::getAddressTypeValue 220 lsnrResNametoAddrType lsnrNetworkMap lsnrName:ora.LISTENER.lsnr networkResName:
2025-07-24 23:04:11.277 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::getLsnrResNameAddrType &s_lsnrResNametoAddrTypeXLock:0x55555a209718lsnrNetworkMap[ora.LISTENER.lsnr]: networkAddressTypeMap[]:IPV4
2025-07-24 23:04:11.277 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateHostName getNodeName 1
2025-07-24 23:04:11.278 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateHostName exit hostIP:192.168.1.223  hostIPV6:
2025-07-24 23:04:11.281 : USRTHRD:3858700032: [     INFO] {0:0:2} checkCrsRet clscrsret: 5
2025-07-24 23:04:11.281 : USRTHRD:3858700032: [     INFO] {0:0:2} CrsCmd::ClscrsCmdData:statGetAttr 040 error getting attribute:ENDPOINTS@SERVERNAME(orastd)
2025-07-24 23:04:11.281 : USRTHRD:3858700032: [     INFO] {0:0:2} CrsCmd::statGetAttr 120 error
2025-07-24 23:04:11.284 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateEndPoints 2311 lsnrResName:ora.LISTENER.lsnr endpAttr:TCP:1521
2025-07-24 23:04:11.284 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::ifFirewallParam entry
2025-07-24 23:04:11.284 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::ifFirewallParam exit
2025-07-24 23:04:11.284 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateEndPoints 2511 type:2 vipVector endpString:(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.223)(PORT=1521))
2025-07-24 23:04:11.284 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::removeDuplicates
2025-07-24 23:04:11.284 : USRTHRD:3858700032: [     INFO] {0:0:2} LsnrAgent::generateEndPoints 1999 exit }

因為是備庫環境,監聽用的1522端口,所以沒有默認的ora.LISTENER.lsnr,難道跟這個有關系?

監控oraagent內存的變換

可以看到每個10分鐘,大概新增加如下的物理內存的使用量。

[root@orastd tmp]# sh ./count_diff_rss.sh  /tmp/ps_2102.log
2025-07-24 14:13:14: 164
2025-07-24 14:23:15: 96
2025-07-24 14:33:15: 272
2025-07-24 14:43:15: 164
2025-07-24 14:53:15: 184
2025-07-24 15:03:15: 72
2025-07-24 15:13:15: 180
2025-07-24 15:23:15: 140
2025-07-24 15:33:15: 192
2025-07-24 15:43:15: 156
2025-07-24 15:53:16: 184
2025-07-24 16:03:16: 196
2025-07-24 16:13:16: 164
2025-07-24 16:23:16: 148
2025-07-24 16:33:16: 228
2025-07-24 16:43:16: 164
2025-07-24 16:53:16: 196
2025-07-24 17:03:16: 92
2025-07-24 17:13:16: 264
2025-07-24 17:23:16: 176
2025-07-24 17:33:16: 180
2025-07-24 17:43:16: 160
2025-07-24 17:53:16: 200
2025-07-24 18:03:16: 164
2025-07-24 18:13:16: 76
2025-07-24 18:23:17: 292
2025-07-24 18:33:17: 48
2025-07-24 18:43:17: 184
2025-07-24 18:53:17: 168
2025-07-24 19:03:17: 128
2025-07-24 19:13:17: 196
2025-07-24 19:23:17: 192
2025-07-24 19:33:17: 144
2025-07-24 19:43:17: 220
2025-07-24 19:53:17: 164
2025-07-24 20:03:18: 200
2025-07-24 20:13:18: 112
2025-07-24 20:23:18: 232
2025-07-24 20:33:18: 192
2025-07-24 20:43:18: 184
2025-07-24 20:53:18: 160
2025-07-24 21:03:18: 192
2025-07-24 21:13:18: 164
2025-07-24 21:23:18: 84

解決方案

從上面的日志中可以懷疑oraagent在不斷判斷對listener的資源時可能異常,導致申請的內存一直不釋放,并且不斷重復上述過程,所以使得內存不斷增加。

新建監聽

新建監聽,并啟動監聽

[grid@orastd ~]$ srvctl add listener
[grid@orastd ~]$ srvctl start listener -l listener

觀察內存使用量

新建監聽后,內存的使用未有明顯變化,所以這里大概就猜測是的原因就是oraagent內部判斷監聽資源時異常,導致內存不釋放

手動釋放oraagent的內存資源

oraagent進程負責grid用戶下面資源的啟停,是一個可以手動kill的進程,所以這里采用手動的方式。

kill oragent進程

[grid@orastd ~]$ ps -ef|grep oraagent
grid      2102     1 18  2024 ?        102-00:56:17 /oracle/app/19.3.0/grid/bin/oraagent.bin
grid     41122 40551  0 23:05 pts/0    00:00:00 tail -1000f ohasd_oraagent_grid.trc
grid     41317 40748  0 23:06 pts/1    00:00:00 grep --color=auto oraagent
[grid@orastd ~]$ kill -9 2102

查看啟動日志信息

ohasd進程負責oraagent進程的啟動,有如下的信息:

2025-07-24 23:06:38.834 : CRSCOMM:3643938560: [     INFO]  IpcL: connection to member 4 has been removed
2025-07-24 23:06:38.834 :CLSFRAME:3643938560: [     INFO]  Removing IPC Member:{Relative|Node:0|Process:4|Type:3}
2025-07-24 23:06:38.834 :CLSFRAME:3643938560: [     INFO]  Disconnected from AGENT process: {Relative|Node:0|Process:4|Type:3}
2025-07-24 23:06:38.835 :    AGFW:3637634816: [     INFO] {0:0:23496} Agfw Proxy Server received process disconnected notification, count=1
2025-07-24 23:06:38.835 :    AGFW:3637634816: [     INFO] {0:0:23496} /oracle/app/19.3.0/grid/bin/oraagent_grid disconnected.
2025-07-24 23:06:38.835 :    AGFW:3637634816: [     INFO] {0:0:23496} Agent /oracle/app/19.3.0/grid/bin/oraagent_grid[2102] stopped!
2025-07-24 23:06:38.835 : CRSCOMM:3637634816: [     INFO] {0:0:23496} IpcL: removeConnection: Member 4 does not exist in pending or formed connections.
2025-07-24 23:06:38.835 : CRSCOMM:3637634816: [    ERROR] [FFAIL]{0:0:23496} IpcL: Failed to disconnect member 4 rc = 4
2025-07-24 23:06:38.835 :   CRSPE:1879045888: [     INFO] {0:0:23497} Disconnected from server:
2025-07-24 23:06:38.835 :    AGFW:3637634816: [     INFO] {0:0:23496} Restarting the agent /oracle/app/19.3.0/grid/bin/oraagent_grid
2025-07-24 23:06:38.835 :    AGFW:3637634816: [     INFO] {0:0:23496} Starting the agent: /oracle/app/19.3.0/grid/bin/oraagent with user id: grid and incarnation:3
2025-07-24 23:06:38.844 :    AGFW:3637634816: [     INFO] {0:0:23496} Starting the HB [Interval =  30000, misscount = 6kill allowed=1] for agent: /oracle/app/19.3.0/grid/bin/oraagent_grid
2025-07-24 23:06:38.930 : CRSCOMM:3643938560: [     INFO]  IpcL: Accepted connection 16497 from user grid member number 7

oraagent進程自己的日志:

2025-07-24 23:06:30.319 :    AGFW:3846092544: [     INFO] {0:0:2} Agent received the message: AGENT_HB[Engine] ID 12293:687689824
Trace file /oracle/app/grid/diag/crs/orastd/crs/trace/ohasd_oraagent_grid.trc
Oracle Database 19c Clusterware Release 19.0.0.0.0 - Production
Version 19.20.0.0.0 Copyright 1996, 2023 Oracle. All rights reserved.CLSB:4160626432: [     INFO] Argument count (argc) for this daemon is 1CLSB:4160626432: [     INFO] Argument 0 is: /oracle/app/19.3.0/grid/bin/oraagent.bin
2025-07-24 23:06:38.927 : default:4160626432: clsu_load_ENV_levels: Failure to retrieve ORA_DAEMON_LOGGING_LEVELS environment variable [-1] [21104].
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: clsdadr  2
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: clsdstat  2
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: clsdnreg  0
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: clsdynam  0
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: allcomp  0
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: default  0
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: clsdimt  0
2025-07-24 23:06:38.927 :   AGENT:4160626432: [     INFO]  Logging level for Module: CLSCAL  0

crs的alet日志如下:

2024-01-06 20:37:59.966 [OCSSD(2281)]CRS-1720: Cluster Synchronization Services daemon (CSSD) is ready for operation.
2025-07-24 23:06:38.917 [ORAAGENT(41326)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 41326

最新oraagent進程內存

這里看到內存使用量從16G降到了不到100M,需要進程使用物理內存會有少量增加,大體上不會超過200M。

[root@orastd tmp]# ./hmem|grep oraagent
41326    oraagent.bin              2482880        46268        96284        96284[root@orastd tmp]# ./hmem -l |head -1 && ./hmem -l |grep oraagent
PID      NAME                     VIRT(kB)   SHARED(kB)      RSS(kB)  PRIVATE(kB)    RssAnon    RssFile   RssShmem      VmRSS     VmData
41326    oraagent.bin              2482880        46268        96288        96288      50020      46268          0      96288    2120936

總結

本案例展示了在Oracle 19.20環境下,oraagent進程出現內存泄漏的實際處理過程。通過對系統進程、內存使用、日志信息的細致排查,發現oraagent不斷嘗試處理一個并不存在的監聽資源(ora.LISTENER.lsnr),導致內存持續增長,最終遠超正常值。雖然嘗試新建監聽未能緩解問題,但通過手動重啟oraagent進程,內存占用恢復正常,間接驗證了進程本身存在異常分配和釋放內存的問題。

提示:

  • 即使在較新版本的Oracle 19C中,依然可能遇到未被官方收錄的BUG,遇到異常現象時要善于通過日志和系統工具定位問題根源。
  • oraagent進程的內存異常增長,往往與資源配置或內部異常循環有關,及時關注日志中的異常提示(如不存在的監聽資源)有助于快速定位問題。
  • 對于oraagent等可安全重啟的進程,適當的重啟操作可以臨時緩解內存泄漏帶來的影響,但建議后續持續關注官方補丁和MOS文檔,及時獲取修復方案。
  • 日常巡檢中,建議定期監控關鍵進程的內存使用情況,發現異常及時處理,避免影響數據庫集群的穩定性。
  • 最重要的就是環境搭建的規范化,這次的內存泄漏,明顯是由于在部署備庫環境時,未完全按照Oracle環境的最佳實踐來部署,最佳實踐是一個永無休止的根據大量真實案例來不斷的更新。
  • 建議將數據庫版本升級到最新的補丁包,不要想到當前沒有出現故障,就不升級。當前沒有出現故障,并不代表著環境中不存在隱患,甚至有可能是已經出現了隱患,但是沒有被發現,就如這個案例一樣,如果不是朋友的細心,估計備庫環境中oraagent泄漏的問題不會提前發現,等生產系統容災切換到備庫后,到時出現內存不足,影響數據庫穩定性和性能,此時估計就是重大故障了。最新的補丁包其實都是在修復BUG,并沒有引入新的功能,修復的BUG越多,也就意味著環境越穩定。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90547.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嘗試幾道算法題,提升python編程思維

一、跳躍游戲題目描述: 給定一個非負整數數組 nums,你最初位于數組的第一個下標。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最后一個下標。示例:輸入:nums [2,3,1,1,4] → 輸出:True輸入…

【菜狗處理臟數據】對很多個不同時間序列數據的文件聚類—20250722

目錄 具體做法 可視化方法1:PCA降維 可視化方法2、TSNE降維可視化(非線性降維,更適合聚類) 可視化方法3、輪廓系數評判好壞 每個文件有很多行列的信息,每列是一個駕駛相關的數據,需要對這些文件進行聚類…

Qwen-MT:翻得快,譯得巧

我們再向大家介紹一位新朋友:機器翻譯模型Qwen-MT。開發者朋友們可通過Qwen API(qwen-mt-turbo),來直接體驗它又快又準的翻譯技能。 本次更新基于強大的 Qwen3 模型,進一步使用超大規模多語言和翻譯數據對模型進行訓練…

在 OceanBase 中,使用 TO_CHAR 函數 直接轉換日期格式,簡潔高效的解決方案

SQL語句SELECT TO_CHAR(TO_DATE(your_column, DD-MON-YY), YYYY-MM-DD) AS formatted_date FROM your_table;關鍵說明:核心函數:TO_DATE(30-三月-15, DD-MON-YY) → 將字符串轉為日期類型TO_CHAR(..., YYYY-MM-DD) → 格式化為 2015-03-30處理中文月份&a…

pnpm運行electronic項目報錯,npm運行正常。electronic項目打包為exe報錯

pnpm運行electronic項目報錯 使用 pnpm 運行 electronic 項目報錯,npm 運行正常,報錯內容如下 error during start dev server and electron app: Error: Electron uninstallat getElectronPath (file:///E:/project/xxx-vue/node_modules/.pnpm/elect…

8?? 高級特性—— 列表生成式

文章目錄🧠 總結1. 基本語法2. 加篩選條件🔁 雙層循環(全排列)📂 遍歷目錄🔑 遍歷字典🔡 轉小寫3. if 和 if...else 的區別4. 練習題🧠 總結 特性用法示例基礎語法[x for x in iter…

DocC的簡單使用

DocC的簡單使用 在寫3GShare中,由于剛開始使用MVC模式來寫東西,對很多東西都不是很熟,經常寫著寫著就忘了自己在寫什么,所以學了一下DocC來加快開發進度 什么是DocC 簡單來說,DocC就是更高級的注釋,雖然…

深入理解C語言快速排序與自省排序(Introsort)

排序算法是計算機科學中最基礎也是最重要的知識之一。快速排序(Quicksort)因其平均時間復雜度為 O(n log n) 而廣受歡迎,但在最壞情況下會退化到 O(n)。為了克服這一缺點,自省排序(Introsort) 應運而生&…

C#編程基礎:運算符與結構詳解

目錄 一.關系運算符 常見關系運算符 二.邏輯運算符 常見邏輯運算符 1. 邏輯與(&& 或 and) 2. 邏輯或(|| 或 or) 3. 邏輯非(! 或 not) 運算符優先級 三.if語句 1.c#程序的三大結構 1.順序…

嵌入式學習-土堆目標檢測(3)-day27

再學一個labelme在labelstudio環境中再pip install labelme安裝好后直接輸入 labelme之后點擊保存,選擇保存文件地址還有一個就是將labelme的格式轉化為yolo格式還是在labelstudio這個環境里面安裝pip install labelme2yolo

Qt OpenGL 集成:開發 3D 圖形應用

Qt 提供了完善的 OpenGL 集成方案,使開發者能夠在 Qt 應用中高效開發 3D 圖形應用。通過 Qt 的 OpenGL 模塊,可簡化 OpenGL 上下文管理、窗口渲染和跨平臺適配,同時結合現代 OpenGL 特性(如著色器、頂點緩沖、紋理等)實…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 熱詞評論查詢功能實現

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解熱詞評論查詢功能實現 視頻在線地址&#…

使用 Google Earth 的 DEM — 教程。

數字高程模型 (DEM)描繪了已知高程點之間的表面高程。本教程將向您展示如何使用 Google Earth 的高程數據生成 DEM。在當今世界,DEM 主要用于 GIS 應用。 當然,我們可以從美國地質調查局 (USGS) 網站下載數字高程模型 (DEM)。但如果我們想知道某個地點的…

在 UniApp 中實現中間凸起 TabBar 的完整指南

如何在 UniApp 中設置中間 TabBar 凸起效果 在移動應用開發中,TabBar 是常見的導航組件,而中間凸起的 TabBar 按鈕則是一種流行的設計風格,常用于突出重要功能(如發布、拍照等)。UniApp 提供了 midButton 屬性&#xf…

微觀低代碼

今日去深圳的一家工廠給客戶做培訓,主要培訓內容為低代碼產品的二開和功能演示。客戶使用了20年的ERP和OA系統,目前想對接到低代碼平臺。客戶目前想實現的主要功能是,對接OA的單點登錄,把ERP的功能遷移到低代碼平臺上來工廠規模比…

Linux進程控制:掌握系統的核心脈絡

Linux進程控制:掌握系統的核心脈絡 在 Linux 系統中,進程控制是系統運行的核心機制之一。無論是日常的命令行操作,還是復雜的后臺服務運行,都離不開對進程的管理和控制。本文將深入探討 Linux 進程控制的相關知識,幫助…

4N90-ASEMI電機控制專用4N90

編輯:LL4N90-ASEMI電機控制專用4N90型號:4N90品牌:ASEMI封裝:ITO-220ABRDS(on):3.60Ω批號:最新引腳數量:3封裝尺寸:如圖特性:N溝道MOS管工作結溫:-55℃~150℃一、卓越性…

Java 筆記 lambda

?Lambda 基本語法 (parameters) -> expression 或 (parameters) -> { statements }// 無參數 Runnable r () -> System.out.println("Hello");// 單個參數&#xff08;小括號可省略&#xff09; Consumer<String> c s -> System.out.println(s…

安全風險監測平臺:被動應對向主動預防的轉變

一、智能識別預警系統安全風險監測平臺通過部署多維度感知網絡&#xff0c;實現對各類安全隱患的智能識別與實時預警。系統采用深度學習算法&#xff0c;對人員行為、設備狀態、環境參數等進行全天候監測分析&#xff0c;建立動態風險評估模型。當檢測到異常情況時&#xff0c;…

圖片查重從設計到實現(2)Milvus安裝準備etcd介紹、應用場景及Docker安裝配置

etcd作用、應用場景及Docker安裝配置 在分布式向量數據庫 Milvus 的架構中&#xff0c;etcd 扮演著至關重要的角色。Milvus 用于存儲和管理海量向量數據&#xff0c;支持高效的相似性搜索等操作&#xff0c;而其分布式集群的正常運行高度依賴元數據的一致性和可靠性&#xff0c…