linux-buff/cache過大導致內存不足-程序異常

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

問題描述

Linux內存使用量超過閾值,使得Java應用程序無可用內存,最終導致程序崩潰。即使在程序沒有掛掉時把程序停掉,系統內存也不會被釋放。

找原因的過程

這個問題已經困擾我好幾個月了,分析過好多次都沒有找到原因,網上查了一下該問題其他人也都遇到過,不過并沒有什么好的解決方案,因為項目一直沒有上線,每次當內存不足時導致程序崩潰都是重啟服務就好了,索性也就沒花太多的時間來找問題。現在項目馬上上線了,不能在出現程序崩潰的情況了,況且還是前置系統,更不能出現任何問題。

最開始一直認為是程序的原因導致內存泄漏,使用jdk自帶的jmap -F -dump:live,format=b,file=/usr/local/sztFront/logs/heapdump.bin命令輸出過幾次dump文件,通過MemoryAnalyzer分析,應用程序沒有耗內存過大的變量。后臺猜測是否日志輸出過多導致的,畢竟是前置系統,每天的報文量特別大,日志能到達5,6個G。所以把日志接收報文關了,日志大小馬上降下來了,每天200M。程序掛掉的時間變長了,原來差不多一周就掛掉了,現在可以達到兩周左右才掛掉,還是不行,沒有沖根本上解決問題。經過在網上搜索各種相關的問題,問題出現在Cached的值過大,導致系統沒有可以再分配的內存空間。Cached只要用來緩存文件的,經常讀寫的文件會被緩存到Cached中,可以增加讀寫效率,該功能是Linux系統內核提供的,從2.6.16以后的核心版本才提供,也就是老版的操作系統,如紅旗DC 5.0、RHEL 4.x之前的版本都沒有。這就可以解釋為什么我的項目總掛掉了,我的項目主要就是處理文件的,所以接收和下載的文件會被緩存起來,一直耗著內存不釋放,即使把程序停掉也不會釋放內存。最后找到了三條執行,可以清理cached的內存

三條指令:

sync

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

執行完這三條指令后通過free -m命令查看,free可用內存馬上增多,buff/cache列值變小,說明內存被釋放了,但是不能總是手動的執行這三條指令,所以最后寫了一個shell腳本,開啟Linux定時任務crond,每天早上檢查一次free內存,當小于4G時執行這三條命令(注:系統內容20G)。

注意:在執行這三條命令之前一定要先執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-Node、已延遲的塊 I/O 和讀寫映射文件)

解決方案(手動)

1. 修改/proc/sys/vm/drop_caches,釋放Slab占用的cache內存空間(參考drop_caches的官方文檔):

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.

注意:在執行這三條命令前先執行sync命令


解決方案(自動)

1、編寫shell定時任務腳本freemem.sh


#! /bin/sh
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /app/memory/logs/mem.log
date >> /app/memory/logs/mem.log
echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> /app/memory/logs/mem.log
if [ $free -le 4000 ] ; then
? ? ? ? ? ? ? ? sync && echo 1 > /proc/sys/vm/drop_caches
? ? ? ? ? ? ? ? sync && echo 2 > /proc/sys/vm/drop_caches
? ? ? ? ? ? ? ? sync && echo 3 > /proc/sys/vm/drop_caches
?? ??? ??? ??? ?used_ok=`free -m | awk 'NR==2' | awk '{print $3}'`
?? ??? ??? ??? ?free_ok=`free -m | awk 'NR==2' | awk '{print $4}'`
?? ??? ??? ??? ?echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> /app/memory/logs/mem.log
? ? ? ? ? ? ? ? echo "OK" >> /app/memory/logs/mem.log
else
? ? ? ? ? ? ? ? echo "Not required" >> /app/memory/logs/mem.log
fi
exit 1

2、使用crontab -e命令編輯當前用戶的crontab

0 6 * * * /usr/local/tomcat/sztFileFront/bin/freemem.sh
定時任務編寫參考:http://www.jb51.net/article/15008.htm


3、重啟crond服務

/sbin/service crond restart

4、查看crond服務是否重啟成功

/sbin/service crond status

最后,問題解決。我設定的定時任務是每天早上6點執行一次freemem.sh腳本
?

轉載于:https://my.oschina.net/u/3049601/blog/2990323

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

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

相關文章

Android 適配(一)

一、Android適配基礎參數1.常見分辨率(px)oppx 2340x1080oppR15 2280x1080oppor11sp 2160*10801080*1920 (主流屏幕16:9)1080*216018:9 手機主流分辨率: 1080*2160高端 16:9 手機主流分辨率: 1080P (1080*1920) 或 2K …

Source Insight 創建工程(linux-2.6.22.6內核源碼)

1. 軟件設置 安裝完Source Insight,需要對其進行設置添加對“.S”匯編文件的支持: 2. 新建linux-2.6.22.6工程 1)選擇工程存放的路徑: 2)下載linux-2.6.22.6內核源碼,并解壓。在Source Insight中 指定源碼的…

課時20:內嵌函數和閉包

目錄: 一、global關鍵字 二、內嵌函數 三、閉包 四、課時20課后習題及答案 ******************** 一、global關鍵字 ******************** 全局變量的作用域是整個模塊(整個代碼段),也就是代碼段內所有的函數內部都可以訪問到全局…

從零開始學產品第六篇:更強大的測試,自動化測試和性能測試

本篇為【從零開始學產品】系列課第1章第5節歡迎到公眾號菜單欄,獲取產品經理課程更多資料 “測試就是拿點鼠標在電腦上瞎點,或者是用手機隨便戳幾下么?” “不,是有計劃有意圖的測試,比如說,邊界測試&#…

Get 了濾鏡、動畫、AR 特效,速來炫出你的短視頻開發特技!

在濾鏡美顏、搞怪特效、炫酷場景等各種新奇玩法驅動下,短視頻開始讓人上癮。 12 月 3 日,七牛云聯合八大短視頻特效平臺共同推出了中國短視頻開發者創意大賽(China Short Video Contest),面向全國邀請廣大開發者&#…

匿名函數、冒泡排序,二分法, 遞歸

匿名函數 lambda 匿名函數 格式 lambda 參數:返回值 函數名統一叫lambda,最多只能寫一行普通的正常的函數 def func(n):return n * n lambda匿名函數寫法 a lambda n : n**2 print(a(3)) 當有多個返回值時suiyi lambda x, y : (1, 2) # 筆試題 …

Redis源碼剖析

Redis源碼剖析和注釋(一)---鏈表結構 Redis源碼剖析和注釋(二)--- 簡單動態字符串 Redis源碼剖析和注釋(三)--- Redis 字典結構 Redis源碼剖析和注釋(四)--- 跳躍表(skiplist) Redis…

Android Activity生命周期

Android生命周期 Android的生命周期:onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy() 如下圖所示: 1.當activity啟動時系統會先調用onCreate(),然后調用onStart(),最后調用**onResume()**方法&#xff0…

date數據存入mysql_Date對象存入mysql數據庫

java.sql.Date,java.sql.Time和java.sql.Timestamp三個都是java.util.Date的子類(包裝類)。java.sql.Date是java.util.Date的子類,是一個包裝了毫秒值的瘦包裝器,允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以…

盛嚴謹,嚴謹,再嚴謹。_評估員工調查的統計嚴謹性

盛嚴謹,嚴謹,再嚴謹。The human resources industry relies heavily on a wide range of assessments to support its functions. In fact, to ensure unbiased and fair hiring practices the US department of labor maintains a set of guidelines (Uniform Guidelines) to …

復權就是對股價和成交量進行權息修

* 所謂復權就是對股價和成交量進行權息修復,按照股票的實際漲跌繪制股價走勢圖, * 并把成交量調整為相同的股本口徑。股票除權、除息之后,股價隨之產生了變化, * 但實際成本并沒有變化。 * 如:原來20元的股票,十送十之…

前端校驗和后端校驗

問:到底是前端校驗好還是后端校驗好呢? 答:后端校驗比前端校驗更安全,更可靠,前端校驗可以增加用戶體驗,一般來說,在前端校驗的東西在后端也必須校驗(比如登陸用戶名、密碼&#xff…

[MySQL] INFORMATION_SCHEMA 數據庫包含所有表的字段

sql注入后可以通過該數據庫獲取所有表的字段信息1. COLLATIONS表 提供有關每個字符集的排序規則的信息。 COLLATIONS表包含以下列:COLLATION_NAME 排序規則名稱。 CHARACTER_SET_NAME 與排序規則關聯的字符集的名稱。 ID 排序規則ID。 IS_DEFAULT 排序規則是否為其字…

開根號的筆算算法圖解_一個數的開根號怎么計算

一個數的開根號怎么計算2020-11-08 15:46:47文/鐘詩賀帶根號的式子可以直接進行開平方的運算。一些特殊的根號運算有;√2≈1.414、1/2-√3≈0.5-1.732≈-1.232、2√5≈22.236≈4.236、√7-√6≈2.646-2.449≈0.197。開平方的筆算方法1.將被開方數的整數部分從個位起…

arima 預測模型_預測未來:學習使用Arima模型進行預測

arima 預測模型XTS對象 (XTS Objects) If you’re not using XTS objects to perform your forecasting in R, then you are likely missing out! The major benefits that we’ll explore throughout are that these objects are a lot easier to work with when it comes to …

net程序員的iPhone開發-MonoTouch

net程序員的iPhone開發-MonoTouch iPhone軟件的Native開發除了使用Apple推薦的Objective-C Cocoa之外,也有其他的一些工具和SDK提供 基于WEB的形式的一些框架在下面這個文章介紹過 各種SmartPhone上的跨平臺開源框架的總結 http://www.cnblogs.com/2018/archive/20…

ASP防止SQL注入

防止SQL注入http://0.0.0.0/bzhs/login.asp?logTypeedit;WAITFOR DELAY 0:0:5 --logType Replace(Replace(Replace(Replace(logType,"-",""),"",""),"&",""),";","")fcdm Replace(Rep…

protobuf java 生成_protobuf代碼生成

windows :1,兩個文件:proto.exe, protobuf-java-2.4.1.jar2,建立一個工程TestPb,在下面建立一個proto文件件,用來存放【。proto】文件3,將proto,exe放在工程下,4,建立一個msg.proto文件:option …

bigquery_在BigQuery中鏈接多個SQL查詢

bigqueryBigquery is a fantastic tool! It lets you do really powerful analytics works all using SQL like syntax.Bigquery是一個很棒的工具! 它使您能夠使用像語法一樣SQL來進行真正強大的分析工作。 But it lacks chaining the SQL queries. We cannot run …

允許指定IP訪問遠程桌面

允許指定IP訪問遠程桌面 電腦軟件 2010-01-23 02:33:40 閱讀595 評論0 字號:大 中 小 訂閱 一、新建IP安全策略 WINR打開運行對話框,輸入gpedit.msc進入組策略編輯器。 依次打開“本地計算機”策略--計算機配置--Windows設置--安全設置--IP安…