linux查看内核版本命令 linux查看内存命令( 二 )


3. 虚拟内存
现代x86系统,计算机能够使用的内存会大于其物理内存的上限,依靠的就是虚拟内存机制 。Linux支持虚拟内存机制和实模式机制 。
实模式下,计算机会直接申请物理内存,虚拟内存机制下,系统会把磁盘当成内存的扩展,已增加可使用的内存大小 。并通过映射map的机制,来保存和物理内存的真实对应关系 。
在磁盘和内存之间传送Page的活动叫做swapping或者页面调度(paging),被用作虚拟内存的磁盘分区称为swap 。
可以通过在线添加swap的方式临时缓解内存不足的问题,但一般不能直接作在线减少swap的操作,很有可能导致进程的crash 。具体swap配置方式见5.1swap相关配置 。
4. OOM
【linux查看内核版本命令 linux查看内存命令】1.What is OOM?Out Of Memory Killer 是 Linux 的一种系统保护机制,在系统内存紧张时,kill掉某些进程防止系统卡死 。系统通过打分机制,来实施对进程的杀死操作 。默认机制是通过扫描所有进程的内存占用,cpu占用等因素,然后打分??(badness),分数越高,进程被kill的优先级就越高 。
2.哪些行为会让系统对进程进行打分?
进程使用fork(2)调用,创建众多子进程时,会加分(+)进程已经运行了很长时间,或者和使用了大量的CPU时间,会减分(-)进程的nice值如果比较低,会加分(+)进程如果是特权进程(privileged),会减分(-)进程如果对硬件设备进行直接访问,会减分(-)
3.在哪儿可以看到进程的打分?/proc/<pid>/oom_score
4.手动调整分数/proc//oom_adj 该文件可以用于调整在oom发生时,哪些进程应该被kill,范围-16 — +15,默认值为0,??
特殊值-17:表示进程永远不会被kill 。
5.我怎么知道系统有没有触发过OOM?/var/log/messages 、 /var/log/syslog 系统日志或者 dmesg 系统日志诊断工具等都能够找到网图如下:
5. 内存相关配置
5.1 swap相关配置
通过调节系统参数,来告诉计算机使用swap分区的权重1. 简介
swappiness范围0-100,默认60
0: 表示禁止使用swap
60: 默认
100: 疯狂使用swap
2. 操作方法
# sysctl vm.swappiness=VALUE
# sysctl vm.swappiness=20
或者
# echo VALUE > /proc/sys/vm/swappiness
# echo 30 > /proc/sys/vm/swappiness通过在线增加swap分区大小,临时控制内存泄露,内存不够用等异常 。1. 需要root用户
2. 创建存储文件
# dd if=/dev/zero of=/home/swap2G bs=1024 count=2M
3. 安全设置
# chown root:root /home/swap2G
# chmod 0600 /home/swap2G
4. 创建liunx交换分区
# mkswap /home/swap2G
5. enable 交换分区
# swapon /home/swap2G
6. 更新fstab文件【注意: 部分操作系统不需要】
# vim /etc/fstab
/home/swap2G none swap sw 0 0
7. 检查是否生效
#free -m
8. 卸载swap分区
# swapoff /home/swap2G
5.2 缓存相关
sync; echo 3 > /proc/sys/vm/drop_caches
0:不释放
1:释放页缓存
2:释放 dentries 和 inodes
3:释放所有缓存
5.3 OOM相关
vm.panic_on_oom是否在触发 oom 机制时触发 kernel panic 。0表示关闭(推荐),1表示打开 。kernel panic是指计算机遇到了致命的错误,并且他不知道该怎么处理时的一种动作——可以类比windows的蓝屏 。我们当然不希望每次计算机在oom时就直接蓝屏 。推荐设置为0vm.overcommit_kbytes:用于限制进程能够申请的最大内存,0表示不设置,如果设置其他数值,比如400,则进程能够申请到的最大内存为 swap+400kBytesvm.overcommit_ratio:定义了进程可以使用的最大内存(百分比模式),默认为50 。表示配置50之后,进程不允许申请超过 swap + 50% * 物理内存总量 以上的内存vm.oom_kill_allocating_task (Linux 2.6.24+支持)这在内存不足的情况下启用或禁用杀死OOM触发任务 。0表示禁用(默认),1表示启用 。可以理解为oom机制的开关,默认为禁用——表示要让oom触发器正常执行 。其他有兴趣的话,可以自行man proc

推荐阅读