對于POSTGRESQL 到底使用了多少內存,大部分的使用方法都是進入到POSTGRESQL 中進行查看,今天我們來分享從PostgreSQL 外部來查看內存的方式方法。
本次主要使用的命令是ps 命令
通過ps 命令中的附帶參數,對當前PG運行的線程進行一個展示,其中每個線程使用的CPU 的Memory 的比率也會清晰地展示在屏幕中。
ps -u postgres o pid,rss:8,cmd | awk 'NR>1 {A+=$2} {print} END{print "Total RSS: " A}'
通過PS 和AWK 的組合,可以對POSTGRESQL 的當前得到與postgresql有關的進程使用內存數,以及總體使用的內存數據量。
首先我們要確認RSS 到底是什么
RSS是當前映射到進程中的頁面總數。它分為兩部分, 第一部分是Shared_Clean + Shared_Dirty中RSS的共享部分,Private_Clean + Private_Dirty是RSS中對這個進程的獨享。
在linux 中proc目錄中有所有相關的進程的信息,PSS 通過下面的預計獲得,所以RSS - PSS 等于的就是進程獨享的內存
ps -u postgres o pid= | sed 's#.*#/proc/&/smaps#'|sed s/[[:space:]]//g | xargs sudo grep ^Pss: | awk '{A+=$2} END{print A}'
實際上知道進程號后,再配合上面的語句稍加改造就可以獲得,你想知道的線程使用的PSS 是多少, 通過下圖兩個值的比較, 就可以知道 postgres 主進程中 16848 - 10737 這個進程與其他進程共享的內存是多少.
當然有沒有更簡單的方式來獲取這些信息, 目前直接可以通過命令來顯示RSS PSS USS 信息的 smem工具可以滿足相關的需求,另外還可以顯示哪些進程已經開始使用了 SWAP
在這之后,你可以告訴他共享內存使用了多少, 進程獨占使用了多少, 有哪些進程已經開始使用SWAP,這對解決某些關于內存方面的問題很有幫助,尤其是對于某些訪問進程的內存使用分析。
- VSS- Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
- RSS- Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
- PSS- Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
- USS- Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)
以上內容由東方瑞通資深講師 Austin原創,Austin老師13年專業DBA經驗,曾任互聯網金融公司Senior DBA、500強制藥企業Senior DBA,精通MySQL、PostgreSQL、Mongo DB、SQLServer