大併發連線的oracle在Linux下記憶體不足的問題的分析(轉)
最近一臺裝有Rhel5.3的40G記憶體的機器上有一個oracle資料庫,資料庫的SGA設定為20G,當執行業務時,一個業務高峰期時,發現swap頻繁交換,CPU 100%,Load很高,基本體現為記憶體不足。此時的連線數在600個左右。按記憶體的計算:每個連線佔用記憶體基本在5M,這樣600個連線只佔用3G記憶體,SGA記憶體20G,作業系統佔用記憶體1G,這樣總佔用的記憶體為24G,而總共記憶體有40G,怎麼會記憶體不足呢?當時是百思不得其解,於是做了大量的壓力測試,首先是寫了一個java程式,啟動多個執行緒,每個執行緒與資料庫建一個連線,然後迴圈執行一個簡單的SQL,這個SQL按一個隨機函式生成的ID去查詢一個很大的表(有索引)。當啟動1000個連線後,使用free -m檢視記憶體:
total used free shared buffers cached
Mem: 40210 25842 14368 0 9 177
-/+ buffers/cache: 25655 14554
Swap: 20481 479 20001發現free的記憶體值很小,used的記憶體值為斷增長,執行大約20分鐘後,當free減少到40M左右的時候, 系統的CPU一下子到100%,Load從15升到600。從這個結果看到,還是記憶體不足,當時還寫了一個指令碼,檢視所有oracle程序的記憶體情況,也沒有發現oracle程序佔用記憶體太多。所以一直沒有找到原因。最後試著用cat /proc/meminfo檢視記憶體時,終於找到了原因,沒有加壓力時,cat /proc/meminfo看到的結果為:
MemTotal: 41175744 kB
MemFree: 27603324 kB
Buffers: 36572 kB
Cached: 13006240 kB
SwapCached: 232980 kB
Active: 304448 kB
Inactive: 12990616 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 41175744 kB
LowFree: 27603324 kB
SwapTotal: 20972816 kB
SwapFree: 20070348 kB
Dirty: 1232 kB
Writeback: 0 kB
AnonPages: 240500 kB
Mapped: 354120 kB
Slab: 136980 kB
PageTables: 34004 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 41560688 kB
Committed_AS: 17163928 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 273756 kB
VmallocChunk: 34359464051 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB當壓力上來時:
MemTotal: 41175744 kB
MemFree: 375212 kB
Buffers: 36444 kB
Cached: 13005200 kB
SwapCached: 232984 kB
Active: 16919192 kB
Inactive: 509908 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 41175744 kB
LowFree: 375212 kB
SwapTotal: 20972816 kB
SwapFree: 20070340 kB
Dirty: 184 kB
Writeback: 0 kB
AnonPages: 4375088 kB
Mapped: 12889760 kB
Slab: 168916 kB
PageTables: 23005464 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 41560688 kB
Committed_AS: 40413008 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 273756 kB
VmallocChunk: 34359464051 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB可以看到壓力上來後,PageTables佔用的記憶體居然高達23G。PageTables是Linux下虛擬記憶體到實體記憶體中做對映時對映表佔用的空間,這個對映表居然佔用了這麼大的記憶體,真讓人不可思議。為了解決這個問題,想到了Linux的大頁管理,正常的頁大小為4k,而大頁管理的頁大小為2M,通過大頁管理後,對映表佔用的空間將會大大減少。於是把資料庫停了,啟動大頁管理,給大頁管理分配20G記憶體:echo 10240 > /proc/sys/vm/nr_hugepages增加root soft memlock -1
root hard memlock -1oracle soft memlock -1
oracle hard memlock -1把資料庫的lock_sga改成true後,再做壓力測試,系統終於能穩定運行了,free -m檢視到的空閒記憶體一直空閒13G:[email protected]:/etc/security>free -m
total used free shared buffers cached
Mem: 40210 26234 13976 0 20 184
-/+ buffers/cache: 26029 14181
Swap: 20481 479 20001http://www.cnblogs.com/woxing/p/3854178.html
相關推薦
大併發連線的oracle在Linux下記憶體不足的問題的分析(轉)
最近一臺裝有Rhel5.3的40G記憶體的機器上有一個oracle資料庫,資料庫的SGA設定為20G,當執行業務時,一個業務高峰期時,發現swap頻繁交換,CPU 100%,Load很高,基本體現為記憶體不足。此時的連線數在600個左右。按記憶體的計算:每個連線佔用記憶體基本
處理大併發之四 libevent demo詳細分析(對比epoll)
處理大併發之四 libevent demo詳細分析(對比epoll) libevent預設情況下是單執行緒,每個執行緒有且僅有一個event_base,對應一個struct event_base結構體,以及賦予其上的事件管理器,用來安排託管給它的一系列的事件。 當有一個事件
安卓開發中記憶體問題分析(一)工具篇
記憶體洩漏和記憶體溢位是安卓開發中經常碰到的問題,如何能夠快速有效的發現並追蹤記憶體洩漏或者記憶體溢位的源頭,是每個開發者都需要掌握的技巧,今天我給大家帶來常見的記憶體分析工具使用方法,希望對大家今後的開發帶來幫助。 使用Eclipse分析應用記憶體使用情況 具體步驟
spring4.2.9 java專案環境下ioc原始碼分析(四)——refresh之obtainFreshBeanFactory方法(@2處理Resource、載入Document及解析前準備)
接上篇文章,上篇文章講到載入完返回Rescouce。先找到要解析的程式碼位置,在AbstractBeanDefinitionReader類的loadBeanDefinitions(String location, Set<Resource> actualResou
spring4.2.9 java專案環境下ioc原始碼分析(六)——refresh之obtainFreshBeanFactory方法(@4預設標籤bean,beans解析、最終註冊)
接上篇文章,解析了import和alias標籤,只是開胃菜比較簡單,下面介紹bean標籤的載入,也是預設名稱空間下解析的重點。protected void processBeanDefinition(Element ele, BeanDefinitionParserDeleg
spring4.2.9 java專案環境下ioc原始碼分析(五)——refresh之obtainFreshBeanFactory方法(@3預設標籤import,alias解析)
接上篇文章,到了具體解析的時候了,具體的分為兩種情況,一種是預設名稱空間的標籤<bean>;另一種是自定義名稱空間的標籤比如<context:xxx>,<tx:xxx>等。先看下預設的名稱空間的標籤解析。protected void par
spring4.2.9 java專案環境下ioc原始碼分析(一)——執行refresh之前
本系列文章講述spring IOC容器如何載入Bean與例項化Bean以及其中所穿插的一些實現。本文章以ClassPathXmlApplicationContext為起點,debug啟動流程。程式碼如下public static void main(String[] args
spring4.2.9 java專案環境下ioc原始碼分析(三)——refresh之obtainFreshBeanFactory方法(@1準備工作與載入Resource)
obtainFreshBeanFactory方法從字面的意思看獲取新的Bean工廠,實際上這是一個過程,一個載入Xml資源並解析,根據解析結果組裝BeanDefinitions,然後初始化BeanFactory的過程。在載入Xml檔案之前,spring還做了一些其他的工作,比
Linux下I2C驅動分析(一)
最近在做一個基於全志A33晶片的android移植時發現嵌入式裝置很多都用到了I2C匯流排通訊,比如說攝像頭,G-sensor,觸控式螢幕等,為此我覺得很好的理解I2C裝置驅動在今後的嵌入式開發中是非常有好處的,而目前我也是處於學習階段,便將這些學習的過程給
java與javax的區別分析(轉)
mes ges 歷史 java虛擬機 虛擬 over 問題 c語言 enc Java是一種受C語言影響的編程語言。Java和Javax本質上是與Java編程語言的上下文一起使用的包。實際上Java和Javax沒有區別。這只是不同的名字。 Java是一種編程語言,受到C語言
Linux用戶管理之使用/bin/false和/usr/sbin/nologin拒絕用戶登錄及其功能分析(轉)
其他 spa 狀態 roo 服務器 linux用戶 密碼 targe let /bin/nologin,/bin/false的意思是禁止某個用戶登錄。 比較常用的用法: #添加一個不能登錄的用戶 useradd -d /usr/local/apache -g ap
msdia80.dll文件出現在磁盤根目錄下的解決方案(轉)
磁盤 har mic http comm 管理員 ges sdi AMF 情況描述: 當安裝某些軟件後,磁盤根目錄中多出了msdia80.dll文件,該文件顯示為2006年12月1日,884KB。 原因: 當使用64位操作系統時,在電腦上安裝 Micro
RIPS PHP源碼靜態分析(轉)
ann 分析技術 sdn pla 語法 cef 技術分享 網站 dot 0x00背景 對於PHP代碼審計的需求,我們當然需要一款好的php代碼審計分析工具--RIPS,它使用了靜態分析技術,能夠自動化地挖掘PHP源代碼潛在的安全漏洞如XSS ,sql註入,敏感信息泄漏,文件
CString和string在unicode與非unicode下的相互轉換(轉)
cst toc ref 編譯 end con adding eas font 原文轉自 http://blog.csdn.net/u014303844/article/details/51397556 CString和string在unicode與非unicode下的相
Spark學習筆記--Spark在Windows下的環境搭建(轉)
最新版本 https ons console 步驟 新版本 用戶 ref sudo 一、JDK的安裝 1、1 下載JDK 首先需要安裝JDK,並且將環境變量配置好,如果已經安裝了的老司機可以忽略。JDK(全稱是JavaTM Platform Standard Editi
PHP單一入口概述與優缺點分析(轉)
inf 記錄 很難 前臺 接收 pathinfo 效率 www. str 單一入口概述單一入口的應用程序就是說用一個文件處理所有的HTTP請求,例如不管是列表頁還是文章頁,都是從瀏覽器訪問index.php文件,這個文件就是這個應用程序的單一入口。打個比方,大家都要上WC,
Ubuntu下實現軟路由(轉)
firewall 為我 control ble iptable display audio 並且 target 參考:http://www.openwrt.pro/post-292.html 個人看法: 1、實現路由在Linux下必須要用到iptables進行轉發,這才
FPGA低溫不能啟動分析(轉)
出了 常用 軟件 手冊 image one strong 內部 超出 FPGA低溫不能啟動分析 現象描述:在給medium板光端機做低溫試驗時,分別給發送版、接收板斷電重新啟動,發現有的板子在-40°可以啟動,而有些板子在-20°都不能啟動,需要升高溫度到0°以上才能啟
QUIC協議原理分析(轉)
內存 鼓勵 pda 視頻 物聯 簡化 發現 不同的 寫在前面 之前深入了解了一下HTTP1.1、2.0、SPDY等協議,發現HTTP層怎麽優化,始終要面對TCP本身的問題。於是了解到了QUIC,這裏分享一篇之前找到的有意義的文章。 原創地址:https://mp.weixi
最大匹配、最小頂點覆蓋、最大獨立集、最小路徑覆蓋(轉)
在講述這兩個演算法之前,首先有幾個概念需要明白: 二分圖: 二分圖又稱二部圖,是圖論中的一種特殊模型。設G=(V,E)是一個無向圖,如果頂點V可以分割為兩個互不相交的子集(A,B),並且圖中的每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i in A, j in