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 

给显卡降温


ubuntu16.04 Nvidia 显卡的风扇调速及startx的后果


参考主页


https://linux.cn/article-5573-3.html
http://blog.csdn.net/kongxx/article/details/51678487

buff/cache 内容释放

linux可用内存足够为什么还用swap

Crontab 实现定时执行一个shell脚本(以每隔十分钟执行一次为例)

你可能感兴趣的:(Linux,系统硬件)