1. 程式人生 > >Linux 釋放cpu&gpu記憶體、視訊記憶體和硬碟

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 

給顯示卡降溫

參考主頁