linux 之内存与磁盘
在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。
Swap用途:Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。
swap清理:swapoff -a && swapon -a
注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大
1. 新建和增加SWAP分区(都必须用root权限,操作过程应该小心谨慎。)
1)新建分区
.以root身份进入控制台(登录系统),输入
swapoff -a #停止所有的swap分区 . 用fdisk命令(例:# fdisk /dev/sdb)对磁盘进行分区,添加swap分区,新建分区,在fdisk中用“t”命令将新添的分区id改为82(Linux swap类型),最后用w将操作实际写入硬盘(没用w之前的操作是无效的)。 . mkswap /dev/sdb2 #格式化swap分区,这里的sdb2要看您加完后p命令显示的实际分区设备名 . # swapon /dev/sdb2 #启动新的swap分区 . 为了让系统启动时能自动启用这个交换分区,可以编辑/etc/fstab,加入下面一行
/dev/sdb2 swap swap defaults
2)新增分区
.创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
# dd if=/dev/zero of=/root/swapfile bs=1M count= .格式化为交换分区文件:
# mkswap /root/swapfile #建立swap的文件系统 .启用交换分区文件:
# swapon /root/swapfile #启用swap文件 .使系统开机时自启用,在文件/etc/fstab中添加一行:
/root/swapfile swap swap defaults
2.调整swap空间使用的优先级
如果内存够大,应当告诉 linux 不必太多的使用 SWAP 分区, 可以通过修改 swappiness 的数值。
swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
各个操作系统的优先级可能都不一样,如果不调整,你会发现添加的虚拟内存几乎没有用到
查看当前swappiness值 # cat /proc/sys/vm/swappiness 修改swappiness值为60(临时修改,重启后即还原为默认值) # sudo sysctl vm.swappiness= 永久修改swappiness默认值(重启生效) # vim /etc/sysctl.conf 找到vm.swappiness ,如果没有则需要手动添加一行 vm.swappiness = 保存即可
3. 四种方法在 Linux 系统中查找最大的前 10 个文件
# find / -type f -print0 | xargs - du -h | sort -rh | head -n .4G /swapfile
.1G /home/magi/ubuntu-17.04-desktop-amd64.iso
564M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
378M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
377M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3247.snap
详解:
- find:在目录结构中搜索文件的命令
- /:在整个系统(从根目录开始)中查找
- -type:指定文件类型
f:普通文件 - -print0:在标准输出显示完整的文件名,其后跟一个空字符(null)
- |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
- xargs:将标准输入转换成命令行参数的命令
- -0:以空字符(null)而不是空白字符(LCTT 译者注:即空格、制表符和换行)来分割记录
- du -h:以可读格式计算磁盘空间使用情况的命令
- sort:对文本文件进行排序的命令
- -r:反转结果
- -h:用可读格式打印输出
- head:输出文件开头部分的命令
- n -10:打印前 10 个文件
2)
# find / -type f -exec du -Sh {} + | sort -rh | head -n .4G /swapfile
.1G /home/magi/ubuntu-17.04-desktop-amd64.iso
564M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
378M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
377M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3247.snap
详解:
- find:在目录结构中搜索文件的命令
- /:在整个系统(从根目录开始)中查找
- -type:指定文件类型
f:普通文件 - -exec:在所选文件上运行指定命令
- du:计算文件占用的磁盘空间的命令
- -S:不包含子目录的大小
- -h:以可读格式打印
- {}:递归地查找目录,统计每个文件占用的磁盘空间
- |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
- sort:对文本文件进行按行排序的命令
- -r:反转结果
- -h:用可读格式打印输出
- head:输出文件开头部分的命令
- n -10:打印前 10 个文件
3)
# find / -type f -print0 | xargs - du | sort -n | tail - | cut -f2 | xargs -I{} du -sh {} 84M /var/lib/snapd/snaps/core_3247.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3604.snap
93M /usr/lib/firefox/libxul.so
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
377M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
378M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
564M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
.1G /home/magi/ubuntu-17.04-desktop-amd64.iso
.4G /swapfile
详解:
- find:在目录结构中搜索文件的命令
- /:在整个系统(从根目录开始)中查找
- -type:指定文件类型
f:普通文件 - -print0:输出完整的文件名,其后跟一个空字符(null)
- |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
- xargs:将标准输入转换成命令行参数的命令
- -0:以空字符(null)而不是空白字符来分割记录
- du:计算文件占用的磁盘空间的命令
- sort:对文本文件进行按行排序的命令
- -n:根据数字大小进行比较
- tail -10:输出文件结尾部分的命令(最后 10 个文件)
- cut:从每行删除特定部分的命令
- -f2:只选择特定字段值
- -I{}:将初始参数中出现的每个替换字符串都替换为从标准输入读取的名称
- -s:仅显示每个参数的总和
- -h:用可读格式打印输出
- {}:递归地查找目录,统计每个文件占用的磁盘空间
4)
# find / -type f -ls | sort -k -r -n | head - | column -t | awk '{print $7,$11}' /swapfile
/home/magi/ubuntu-17.04-desktop-amd64.iso
/home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
/home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
/home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
/usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
/usr/lib/firefox/libxul.so
/var/lib/snapd/snaps/core_3604.snap
/var/lib/snapd/snaps/core_3440.snap
/var/lib/snapd/snaps/core_3247.snap
详解:
- find:在目录结构中搜索文件的命令
- /:在整个系统(从根目录开始)中查找
- -type:指定文件类型
f:普通文件 - -ls:在标准输出中以 ls -dils 的格式列出当前文件
- |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
- sort:对文本文件进行按行排序的命令
- -k:按指定列进行排序
- -r:反转结果
- -n:根据数字大小进行比较
- head:输出文件开头部分的命令
- -10:打印前 10 个文件
- column:将其输入格式化为多列的命令
- -t:确定输入包含的列数并创建一个表
- awk:模式扫描和处理语言
- '{print $7,$11}':只打印指定的列
linux 之内存与磁盘的更多相关文章
- linux限制内存和磁盘使用
一.如何限制用户的磁盘空间 1. 查看系统中所有用户的磁盘空间配额 sudo repquota /dev/vda1 2. 查看某个用户的磁盘空间配额 sudo edquota user_name 要想 ...
- linux查看内存及磁盘使用情况
1.查看当前目录 命令: df -h (统一每个目录下磁盘的整体情况) 2.查看指定目录 在命令后直接放目录名,比如查看"usr"目录使用情况: 命令: df ...
- Linux按照CPU、内存、磁盘IO、网络性能监测
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书 ...
- linux性能问题(CPU,内存,磁盘I/O,网络)
一. CPU性能评估 1.vmstat [-V] [-n] [depay [count]] -V : 打印出版本信息,可选参数 -n : 在周期性循环输出时,头部信息仅显示一次 delay : 两次输 ...
- 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
- linux中监控CPU、内存和磁盘状态的shell脚本。(centos7)
这篇博客中所写的脚本,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控.不过自己写一遍,可以让初学者对CPU.内存.磁盘等一些基础知识和基础命令更加了解. 1.利用vmstat工具监控CPU ...
- Linux按照CPU、内存、磁盘IO、网络性能监测【转载】
本文转载地址:https://my.oschina.net/chape/blog/159640 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监 ...
- 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?
1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...
- 测网速 fping Linux查看网络即时网速 linux性能问题(CPU,内存,磁盘I/O,网络)
Linux查看网络即时网速 fping 是ping 工具的加强版本 例出局域网中存活的主机 (Ubuntu apt-get装上 cnetos装不上) zzx@zzx11:~$ fping -a 19 ...
随机推荐
- NaN情况下无法比较大小
<pre name="code" class="java">package nan; /** * NaN情况下无法比较大小 * @author ro ...
- js中bind解析
一.arguments的含义 // arguments 是一个对应于传递给函数的参数的类数组对象 function a(){ console.log(arguments); } a(); // Arg ...
- linux服务之redis
redis wget http://download.redis.io/releases/redis-4.0.6.tar.gzcd redis-4.0.6makecd src/./redis-serv ...
- flutter 自定义tabbar 给tabbar添加背景功能
flutter 自带的tabbar BottomNavigationBar有长按水波纹效果,不可以添加背景图片功能,如果有这方面的需求,就需要自定义tabbar了 自定义图片 我们使用BottomAp ...
- mysql 批量kill locked 进程
mysql -s -e "show processlist;" | grep 'Sending data' | awk '{print "kill "$1&qu ...
- 【Hadoop】MapReduce自定义分区Partition输出各运营商的手机号码
MapReduce和自定义Partition MobileDriver主类 package Partition; import org.apache.hadoop.io.NullWritable; i ...
- Jmeter启动报错解决方案
安装好jmeter之后在启动Jmeter的过程中出现了如下的报错信息(大部分的原因是配置不对): /usr/local/Cellar/jmeter/5.1.1/libexec/bin/jmeter: ...
- Elasticsearch unassigned 故障排查
1. 故障分析与排查 一个 Elasticsearch 集群至少包括一个节点和一个索引.或者它 可能有一百个数据节点.三个单独的主节点,以及一小打客户端节点--这些共同操作一千个索引(以及上万个分片) ...
- 配置nova-compute在不同的hypervisors上使用不同的存储后端
说明:主参考:https://www.sunmite.com/openstack/use-local-storage-for-different-hypervisors.html 在控制节点上执行 1 ...
- Linux通配符知识深度实践详解
注意:linux通配符和三剑客(grep.awk.sed)正则表达式是不一样的,因此,代表的意义也有较大的区别. 通配符一般用户命令行bash环境,而Linux正则表达式用于grep.sed.awk场 ...