1. 程式人生 > >LINUX記憶體高,觸發OOM-KILLER問題解決

LINUX記憶體高,觸發OOM-KILLER問題解決

最近遇到兩起Linux的記憶體問題,其一是觸發了oom-killer導致系統掛

1. 首先確認該系統的版本是32位

?
#uname -aLinux alarm 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386

2. 我們瞭解一下32位Linux的記憶體管理結構

?
# DMA: 0x00000000 -  0x00999999 (0 - 16 MB)# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB# HighMem: 0x038000000 - <硬體特定>

    核心使用low memory來跟蹤所有的記憶體分配,這樣的話一個16GB記憶體的系統比一個4GB記憶體的系統,需要消耗更多的low memory,當low memory耗盡,即便系統仍然有剩餘記憶體,仍然會觸發oom-killer。在2.6核心的表現是,殺掉佔用記憶體最高的程序,所以會導致sshd等程序被殺掉,造成系統無法登入。

3. 如何檢視lowMem

複製程式碼-bash-3.00# free -lm
total used free shared buffers cached
Mem: 2026 1973 52 0 36 1303
Low: 874 823 51
High: 1151 1150 1
-/+ buffers/cache: 633 1392
Swap: 3067
142 2924複製程式碼

4. 所以我們需要保護LowMem,在2.6核心引入了lower_zone_protection,這將讓核心願意保護low memory,從而在分配記憶體時優先考慮從high memory分配。

?
-bash-3.00# cat /proc/sys/vm/lower_zone_protection0-bash-3.00#echo 400 > /proc/sys/vm/lower_zone_protection

 另一起問題是24G記憶體的系統,空閒記憶體已經不到50M

1. 確認該系統的版本是64位

?
# uname -aLinux gxgd-nms-app 2.6.18-194.el5xen #1 SMP Tue Mar 16 22:01:26 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

2. 用ps檢視各程序的記憶體,大約就佔用了4G, 絕大部分記憶體都是被Page Cache所佔用。Linux核心的策略是最大程度的利用記憶體cache 檔案系統的資料,提高IO速度,雖然在機制上是有程序需要更大的記憶體時,會自動釋放Page Cache,但不排除釋放不及時或者釋放的記憶體由於存在碎片不滿足程序的記憶體需求。

   所以我們需要一個方法,能夠限定PageCache的上限。

Linux 提供了這樣一個引數min_free_kbytes,用來確定系統開始回收記憶體的閥值,控制系統的空閒記憶體。值越高,核心越早開始回收記憶體,空閒記憶體越高。

?
[[email protected] root]# cat /proc/sys/vm/min_free_kbytes163840echo 963840 > /proc/sys/vm/min_free_kbytes

其他可選的臨時解決方法:

關閉oom-killer

cat /proc/sys/vm/oom-kill
echo "0" > /proc/sys/vm/oom-kill
vi /etc/sysctl.conf
  vm.oom-kill = 0

2. 清空cache (可選)
echo 1 > /proc/sys/vm/drop_caches

相關推薦

LINUX記憶體觸發OOM-KILLER問題解決

最近遇到兩起Linux的記憶體問題,其一是觸發了oom-killer導致系統掛1. 首先確認該系統的版本是32位?#uname -aLinux alarm 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686

Linux內存觸發oom-killer問題解決

滿足 linux 更多 sshd buffers 優先 blog arp use 最近遇到兩起Linux的內存問題,其一是觸發了oom-killer導致系統掛 1. 首先確認該系統的版本是32位 ? #uname -a Linux alarm 2.6.9-6

Linux程序被殺掉(OOM killer檢視系統日誌

程式運行了一段時間,有2個程序掛掉了,正常情況下程序不會主動掛掉,簡單分析後認為可能是執行時某段時間記憶體佔用過大,系統記憶體不足導致觸發了Linux作業系統OOM killer機制,將執行中的程序殺掉

linux記憶體不足swap交換分割槽建立

為什麼需要swap 根 據Redhat公司的建議,Linux系統swap分割槽最適合的大小是實體記憶體的1-2倍.不過Linux上有些軟體對swap分割槽得需求較大,例如要順 利執行Oracle資料庫軟體,swap分割槽至少需要400MB或者實體記憶體2倍以上的空間.當然我們在安裝Linux的時候,就能直接

Linux記憶體不足新增swap分割槽

Linux記憶體不足,新增swap分割槽 swap分割槽屬於交換分割槽,起虛擬記憶體的作用。由於記憶體資源的寶貴,於是將硬碟的一部分作為記憶體來使用。所以在記憶體不足的時候,就可以通過適當的增加交換分割槽大小來達到增加記憶體的作用。 在編譯mysql5.7.23的時候,購買的伺服器記

[Linux] OOM-killer機制(殺掉程序釋放記憶體

Linux下面有個特性叫OOM killer(Out Of Memory killer),這個東西會在系統記憶體耗盡的情況下跳出來,選擇性的幹掉一些程序以求釋放一些記憶體。相信廣大從事Linux服務端程式設計的農民工兄弟們或多或少遇到過(人在江湖漂,哪有不挨刀啊)。典型的情況

解決linuxEclipse系列軟體執行時閃爍CPU佔用一段時間後卡死

軟體包括 xmind dbeaver truestudio eclipse 原因分析 在linux下,eclipse的圖形介面實現主要是GTK,用到了org.eclipse.equinox.launcher.gtk.linux.x86_64這個模組。 但是這個模組在預設執

win7 svchost.exe佔用記憶體和CPU很電腦很卡的解決方法

本來系統用了很久都不會卡,或者說原來的問題我都已經解決過了,但是有一天,用360掃描了一下,發現Windows有些更新,我就點更新了。 這不更新倒好,電腦沒啥毛病, 但是 更新之後,我就發現我的瀏覽器莫名其妙的卡了一會,然後基本就是宕機的感覺,法科,不能忍。 檢視程序,發現

Docker長期執行導致Linux記憶體buff/caches佔用過解決方法

Docker長期執行導致Linux記憶體buff/caches佔用過高,這個問題很常見,但是我們是無法控制Docker自己對pag

linux下開發解決cocos2d-x中編譯出現的一個小問題, undefined reference to symbol &#39;pthread_create@@GLIBC_2.2.5&#39;

water span x86 code bject data- ace 技術分享 inux 解決cocos2d-x中編譯出現的一個小問題 對於cocos2d-x 2.×中編譯中,若頭文件裏引入了#include "cocos-ext.h",在進行C++編譯的時候會遇到例

Linux安裝unixODBC解決libodbc.so.2缺失問題

linu sun target tro div str targe 通過 http 背景: 今天筆者在新的linux系統中,編譯以前的代碼,發現libobdc.so.2缺失。通過尋找發現只要安裝unixODBC即可。因此筆者開始了安裝之旅 筆者首先通過 "yum searc

java進程占用系統內存排查解決

java進程故障:最近收到生產服務器的報警短信以及郵件,報警內容為:內存使用率高於70%。使用top命令查看系統資源的使用情況,命令:top如圖可以看到java的進程內存使用率較高,java進程的內存使用率達到了70%+2.定位線程問題(通過命令查看9718進程的線程情況),命令:ps p 9718 -L -

針對Linux系統主機進入修復模式解決開機報錯問題

ebo 掛載 報錯 講解 修復 exit mount 需要 oot 這裏講解的是,當Linux系統的主機開不了機的情況下,可以進入修復模式進行相應的修改 1.讓主機重啟,進入開機時的內核選擇界面,按e進入編輯界面 2.找到linux16那一行,將光標移動到最前面,按下End

HS6 USB數據采集卡、USB高速數據采集卡觸發功能圖解

顯示 water 儀器 設置 s系列 存儲 watermark 觸發器 工程 HS系列數據采集卡,不但能實現高速數據采集,而且能通過(Multi Channel)多通道測量分析軟件,實現各種復雜觸發功能的邏輯關系,捕捉瞬態高速信號及顯示對應的觸發曲線。 HS4、HS5、HS

linux下GTK程式設計:顯示CPU使用率記憶體使用率網速。

StartOS 5.1版GNOME核心linux用了一段時間後,一直想視窗程式設計,QT最先搭建好,QT入門做了一個系統資訊,重灌系統後發現不能運行了,要安裝QT環境才能執行,於是想做一種低依賴的系統級程式設計,因為StartOS已經停止更新了,千辛萬苦第三次才成功搭建GTK環境,結合C語言對QT原

php版本過tp5頁面出現No input file specified解決方案

一,php頁面出現No input file specified原因 (1)phpStudy配置php版本不符 (2)環境變數路徑不一致 二,解決方案: (1)切換相應版本即可 (2)修改tp5應用入口檔案同級目錄.htaccess檔案,內容如下: <IfModule mod_rewrit

PHP 實現大資料(30w量級)表格匯出(匯出excel) 提高效率減少記憶體消耗終極解決方案

使用php做專案開發的同學,一定都會有過使用php進行excel表格匯出的經歷,當匯出少量資料還好,一旦資料量級達到5w、 10w、20w甚至30以上的時候就會面臨同樣的問題: 1、匯出時間變得很慢,少則1分鐘,多則好幾分鐘,資料量一旦上來,還可能面臨導不出來的困窘(這種匯出效率正常人都會受

linux跟目錄記憶體爆滿導致伺服器上專案經常卡停

廢話不多說,直接進入正題 ---------------------------------------------------------------------------------------------------------------------------------------

使用python進行Linux伺服器監測畫CPU使用率和記憶體佔用圖

整體思想 使用python包psutil 獲取linux伺服器CPU、記憶體等相關資料 資料儲存在本地或者儲存在資料庫 讀取資料,使用python包pyecharts畫圖 使用Flask,頁面前端訪問 一、pstuil 的安裝和使用,儲存資料 pip inst

Windows Linux 80 埠被佔用如何檢視和解決

有些問題遇到因為命令不總用,所以記錄一下: Windows 80埠被佔用: https://blog.csdn.net/q343509740/article/details/80821409 1.開啟cmd命令視窗 輸入如下指令檢視所有埠和PID netstat –ano 2.找到對應的