Linux 釋放cpu&gpu記憶體、視訊記憶體和硬碟
free -m
free -m
total used free shared buff/cache available
Mem: 128831 15666 23617 406 89547 111448
Swap: 130986 130977 9
total 記憶體總數
used 已經使用的記憶體數
free 空閒的記憶體數
shared 多個程序共享的記憶體總額
buffers buffer Cache和cached Page Cache 磁碟快取的大小
-buffers/cache (已用)的記憶體數:used - buffers - cached
+buffers/cache(可用)的記憶體數:free + buffers + cached
可用的memory=free memory+buffers+cached
通常情況下buff/cache 佔據記憶體特別大
sudo apt-get install sysinfo
sysinfo #檢視系統資訊
sudo apt-get install hardinfo
hardinfo #檢視硬體資訊
為什麼 buffer/cache 會佔用這麼多的記憶體?
Cache:快取區,是快取記憶體,是位於CPU和主記憶體之間的容量較小但速度很快的儲存器,因為CPU的速度遠遠高於主記憶體的速度,CPU從記憶體中讀取資料需等待很長的時間,而 Cache儲存著CPU剛用過的資料或迴圈使用的部分資料,這時從Cache中讀取資料會更快,減少了CPU等待的時間,提高了系統的效能。
Cache並不是快取檔案的,而是快取塊的(塊是I/O讀寫最小的單元);Cache一般會用在I/O請求上,如果多個程序要訪問某個檔案,可以把此檔案讀入Cache中,這樣下一個程序獲取CPU控制權並訪問此檔案直接從Cache讀取,提高系統性能。
Buffer:緩衝區,用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料;通過buffer可以減少程序間通訊需要等待的時間,當儲存速度快的裝置與儲存速度慢的裝置進行通訊時,儲存慢的資料先把資料存放到buffer,達到一定程度儲存快的裝置再讀取buffer的資料,在此期間儲存快的裝置CPU可以幹其他的事情。
Buffer:一般是用在寫入磁碟的,例如:某個程序要求多個欄位被讀入,當所有要求的欄位被讀入之前已經讀入的欄位會先放到buffer中。
buffer/cache使用過高通常是程式頻繁存取檔案後,實體記憶體會很快被用光,
當程式結束後,記憶體不會被正常釋放,而是成為cache狀態.
linux可用記憶體足夠為什麼還用swap?
核心引數 swappiness 的值的大小,決定著linux何時開始使用swap。
swappiness=0 時表示盡最大可能的使用實體記憶體以避免換入到swap.
swappiness=100 時候表示最大限度使用swap分割槽,並且把記憶體上的資料及時的換出到swap空間裡面.
此值linux的基本預設設定為60,不同發行版可能略微不同.
檢視命令具體如下:
cat /proc/sys/vm/swappiness
60
意思就是說,記憶體在使用率到40%(100%-60%)的時候,系統就會開始出現有交換分割槽的使用。
記憶體的速度會比磁碟快很多,這樣會加大系統io,同時造的成大量頁的換進換出,嚴重影響系統的效能,所以在作業系統層面,要儘可能使用記憶體,對該引數進行調整。
調整值
sysctl vm.swappiness=10
vm.swappiness = 10
cat /proc/sys/vm/swappiness
10
重啟依舊生效,需要在/etc/sysctl.conf修改:
cat /etc/sysctl.conf
vm.swappiness = 10
sysctl -p
swap清理
sync #將記憶體緩衝區資料立刻同步到磁碟
swapoff -a # 關閉所有的swap
swapon -a #啟用所有swap
注意:這樣清理有個前提條件,空閒的記憶體必須比已經使用的swap空間大
cache清理
1.free -m
cat /proc/meminfo
2.sudo -i
3.cat /proc/sys/vm/drop_caches
4.sync #執行sync將dirty的內容寫回硬碟,同步一下資料。將所有正在記憶體中的緩衝區寫到磁碟中,其中包括已經修改的檔案inode、已延遲的塊I/O以及讀寫對映檔案,從而確保檔案系統的完整性
-----------------------------------------
-----------------------------------------
#通過修改proc系統的drop_caches清理free的cache
#Freeing Up the Page Cache #釋放頁快取
5.echo 1 > /proc/sys/vm/drop_caches #free pagecache
6.sync #執行sync將dirty的內容寫回硬碟,同步一下資料。將所有正在記憶體中的緩衝區寫到磁碟中,其中包括已經修改的檔案inode、已延遲的塊I/O以及讀寫對映檔案,從而確保檔案系統的完整性
#Freeing Up the Dentries and Inodes 釋放dentries和inodes
7.echo 2 > /proc/sys/vm/drop_caches # free dentries and inodes
8.sync
-----------------------------------------
-----------------------------------------
#Freeing Up the Page Cache, Dentries and Inodes 釋放所有快取
9.echo 3 > /proc/sys/vm/drop_caches
10.cat /proc/sys/vm/drop_caches
11. free -m
每次可以變換數字。
長命令
sudo su # 進入root賬號下
sudo su -c 'free -m && sync && echo 3 > /proc/sys/vm/drop_caches && sync && free -m'
0 – 不釋放
1 – 釋放頁快取
2 – 釋放dentries和inodes
3 – 釋放所有快取
記憶體釋放指令碼
新建freemen.sh
cd root
mkdir toolsetting
cd toolsetting
gedit freemen.sh
新增以下內容
#!/bin/bash
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /var/log/mem.log
date >> /var/log/mem.log
echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches
echo "OK" >> /var/log/mem.log
echo "Not required" >> /var/log/mem.log
將指令碼新增到crond任務,定時執行。
crontab -e #新增定時任務
新增下列命令,每隔2分鐘執行一次
*/2 * * * * root /root/toolsetting/freemem.sh
備註:Crontab第一道第五個欄位的整數取值範圍及意義是:
0~59 表示分
1~23 表示小時
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
修改指令碼的許可權
chmod 777 /root/toolsetting/freemem.sh
啟動定時服務
service crond stop
service crond start
檢視定時任務
crontab -l
檢視結果
tail -f /var/log/mem.log
===========================
2017年 05月 10日 星期三 09:02:01 CST
Memory usage | [Use:15729MB][Free:99379MB]
OK
Not required
===========================
2017年 05月 10日 星期三 09:03:01 CST
Memory usage | [Use:15733MB][Free:111141MB]
OK
Not required
===========================
2017年 05月 10日 星期三 09:04:01 CST
Memory usage | [Use:15738MB][Free:110174MB]
OK
Not required
===========================
2017年 05月 10日 星期三 09:05:02 CST
Memory usage | [Use:15742MB][Free:111135MB]
OK
Not required
===========================
2017年 05月 10日 星期三 09:06:01 CST
Memory usage | [Use:15758MB][Free:111117MB]
OK
Not required
===========================
2017年 05月 10日 星期三 09:07:01 CST
Memory usage | [Use:15772MB][Free:110138MB]
OK
Not required
釋放硬碟示例如下
在安裝好這一連串軟體之後,或許想要清理一下系統來釋放一點硬碟上的空間,輸入以下命令即可
sudo apt-get -y autoremove
sudo apt-get -y autoclean
sudo apt-get -y clean
gpu
#檢視顯示卡效能測試
sudo apt install mesa-utils
glxgears # 每5s的幀數
方法一
#lspci命令用於顯示當前主機的所有PCI匯流排資訊,以及所有已連線的PCI裝置資訊
#lspci 只是列舉使用PCI (包括PCIE )總線上的裝置;
如果一個裝置沒有位於PCI 總線上,命令是不會列出來的
lspci | grep -i vga #檢視顯示卡資訊
lspci | grep -i nvidia #檢視nvidia顯示卡資訊
lspci | egrep 'VGA|3D' #顯示所有顯示卡資訊
nvidia-smi #檢視gpu使用情況
nvidia-settings #設定GPU引數,比如風扇運轉速度
watch -n 1 nvidia-smi #實時顯示,配合watch命令, 讓一秒重新整理一次
nvidia-smi -L # list all available NVIDIA devices
sudo fuser -v /dev/nvidia* #查詢佔用GPU資源的PID
sudo kill -9 ***(PID) # 解除視訊記憶體佔用
方法二
rmmod nvidia #unload the nvidia driver
modprobe nvidia #reloading
給顯示卡降溫
參考主頁