在線上db2數據庫服務器,使用的linux操做系統(RHEL,centos),當db2數據庫運行一段時間以後,操做系統的物理內存就趨近於0,同時系統的cache暴增,可是use卻不高,下面是正常使用linux
free -g
total used free shared buffers cached
Mem: 125 68 57 66 0 66
-/+ buffers/cache: 2 123
Swap: 15 0 15
複製代碼
下面是異常狀況git
free -g
total used free shared buffers cached
Mem: 125 68 0 66 0 123
-/+ buffers/cache: 2 123 []()
Swap: 15 0 15
複製代碼
此時可用物理內存過少,db2數據庫總體性能降低,影響業務使用,爲解決線上,採用臨時解決辦法,手動去釋放cache,方法以下github
sync
echo 1 >/proc/sys/vm/drop_caches
複製代碼
在沒定位到cache太高緣由以前,只能把手動清理cache的方法寫成腳本,放到crontab中定時去清理 通過屢次排查,終於發現操做系統cache太高的緣由,是由於db2數據庫備份致使,db2數據庫備份時,備份的數據寫入文件系統時,先通過文件系統的cache,再從cache寫入磁盤中,若是使用direct io,備份數據就不通過cache,會直接寫入磁盤,下面要解決 的是怎麼讓備份去使用direct io。sql
通過查閱db2官方幫助文檔,發現有一個參數DB2_BACKUP_USE_DIO,設置成on以後,能夠達到此效果,通過測試,db2備份時,系統cache再也不增加,在db2 9.5版本設置此參數須要重啓數據庫實例,db2 9.5之後版本設置以後,再下一次備份時生效。數據庫
本篇文章由一文多發平臺ArtiPub自動發佈centos