1. 程式人生 > >大併發連線的oracle在Linux下記憶體不足的問題的分析(轉)

大併發連線的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檢視記憶體:

#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看到的結果為:
[email protected]:/proc/sys/vm>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當壓力上來時:
[email protected]:/proc/sys/vm>cat
 /proc/meminfo
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      20001
http://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還做了一些其他的工作,比

LinuxI2C驅動分析

        最近在做一個基於全志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