- 浏览: 2262595 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
关键字:教你认识Linux内存管理方式,分析Swap被程序占用情况
一、先了解一下linux对内存的管理方式:
在Linux里(别的系统也差不多),内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。很多人会把虚拟内存和Swap混为一谈,实际上Swap只是虚拟内存引申出的一种技术而已:操作系统一旦物理内存不足,为了腾出内存空间存放新内容,就会把当前物理内存中的内容放到交换分区里,稍后用到的时候再取回来,需要注意的是,Swap的使用可能会带来性能问题,偶尔为之无需紧张,糟糕的是物理内存和交换分区频繁的发生数据交换,这被称之为Swap颠簸,一旦发生这种情况,先要明确是什么原因造成的,如果是内存不足就好办了,加内存就可以解决,不过有的时候即使内存充足也可能会出现这种问题,比如MySQL就有可能出现这样的情况,解决方法是限制使用Swap:
shell> sysctl -w vm.swappiness=0 查看内存情况最常用的是free命令:
shell> free -m
total used free shared buffers cached
Mem: 32101 29377 2723 0 239 25880
-/+ buffers/cache: 3258 28842
Swap: 2047 0 2047
新手看到used一栏数值偏大,free一栏数值偏小,往往会认为内存要用光了。其实并非如此,之所以这样是因为每当我们操作文件的时候,Linux都会尽可能的把文件缓存到内存里,这样下次访问的时候,就可以直接从内存中取结果,所以cached一栏的数值非常的大,不过不用担心,这部分内存是可回收的,操作系统会按照LRU算法淘汰冷数据。除了cached,还有一个buffers,它和cached类似,也是可回收的,不过它的侧重点在于缓解不同设备的操作速度不一致造成的阻塞,这里就不多做解释了。
知道了原理,我们就可以推算出系统可用的内存是free + buffers + cached:
shell> echo "2723 + 239 + 25880" | bc -l
28842
至于系统实际使用的内存是used –buffers –cached:
shell> echo "29377 - 239 - 25880" | bc -l
3258
除了free命令,还可以使用sar命令:
shell> sar -r
kbmemfree kbmemused %memused kbbuffers kbcached
3224392 29647732 90.19 246116 26070160
3116324 29755800 90.52 245992 26157372
2959520 29912604 91.00 245556 26316396
2792248 30079876 91.51 245680 26485672
2718260 30153864 91.73 245684 26563540
shell> sar -W
pswpin/s pswpout/s
0.00 0.00
0.00 0.00
0.00 0.00
0.00 0.00
0.00 0.00
二、简单命令方式查看swap被那些进程占用:
简单脚本递归,列出swap使用pid ,top 10
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10
查看指定进程所使用的swap命令:
awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps
三、查看所有进程占用情况swap的脚本:
#!/bin/bash
# Get current swap usage for all running processes
# writted by xly
function getswap {
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"
}
getswap
#getswap|egrep -v "Swap used: 0"
一、先了解一下linux对内存的管理方式:
在Linux里(别的系统也差不多),内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。很多人会把虚拟内存和Swap混为一谈,实际上Swap只是虚拟内存引申出的一种技术而已:操作系统一旦物理内存不足,为了腾出内存空间存放新内容,就会把当前物理内存中的内容放到交换分区里,稍后用到的时候再取回来,需要注意的是,Swap的使用可能会带来性能问题,偶尔为之无需紧张,糟糕的是物理内存和交换分区频繁的发生数据交换,这被称之为Swap颠簸,一旦发生这种情况,先要明确是什么原因造成的,如果是内存不足就好办了,加内存就可以解决,不过有的时候即使内存充足也可能会出现这种问题,比如MySQL就有可能出现这样的情况,解决方法是限制使用Swap:
shell> sysctl -w vm.swappiness=0 查看内存情况最常用的是free命令:
shell> free -m
total used free shared buffers cached
Mem: 32101 29377 2723 0 239 25880
-/+ buffers/cache: 3258 28842
Swap: 2047 0 2047
新手看到used一栏数值偏大,free一栏数值偏小,往往会认为内存要用光了。其实并非如此,之所以这样是因为每当我们操作文件的时候,Linux都会尽可能的把文件缓存到内存里,这样下次访问的时候,就可以直接从内存中取结果,所以cached一栏的数值非常的大,不过不用担心,这部分内存是可回收的,操作系统会按照LRU算法淘汰冷数据。除了cached,还有一个buffers,它和cached类似,也是可回收的,不过它的侧重点在于缓解不同设备的操作速度不一致造成的阻塞,这里就不多做解释了。
知道了原理,我们就可以推算出系统可用的内存是free + buffers + cached:
shell> echo "2723 + 239 + 25880" | bc -l
28842
至于系统实际使用的内存是used –buffers –cached:
shell> echo "29377 - 239 - 25880" | bc -l
3258
除了free命令,还可以使用sar命令:
shell> sar -r
kbmemfree kbmemused %memused kbbuffers kbcached
3224392 29647732 90.19 246116 26070160
3116324 29755800 90.52 245992 26157372
2959520 29912604 91.00 245556 26316396
2792248 30079876 91.51 245680 26485672
2718260 30153864 91.73 245684 26563540
shell> sar -W
pswpin/s pswpout/s
0.00 0.00
0.00 0.00
0.00 0.00
0.00 0.00
0.00 0.00
二、简单命令方式查看swap被那些进程占用:
简单脚本递归,列出swap使用pid ,top 10
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10
查看指定进程所使用的swap命令:
awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps
三、查看所有进程占用情况swap的脚本:
#!/bin/bash
# Get current swap usage for all running processes
# writted by xly
function getswap {
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"
}
getswap
#getswap|egrep -v "Swap used: 0"
发表评论
-
Linux下查看进程的带宽使用情况
2018-12-29 20:13 3654NetHogs 介绍 NetHogs 是 Linux 平台下 ... -
Linux下进程管理利器—supervise(监控并将死掉的程序重启)
2017-06-02 23:19 12632关键字:Linux下进程管理利器—supervise(监控并将 ... -
阿里云内网和公共NTP服务器(网络时间协议-时间同步服务)
2017-05-12 16:20 10038关键字:阿里云内网和公共NTP服务器(网络时间协议-时间同步服 ... -
win7 64位的数据源(ODBC)配置问题
2015-01-20 16:36 1079关键字:win7 64位的数据源(ODBC)配置问题 ... -
aaaaaaaaaaaaaaaaaa
2014-10-16 16:58 0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... -
各种品牌类型的主板 电脑开机启动选项快捷键
2014-04-24 11:57 1662关键字:各种品牌类型的主板 电脑开机启动选项快捷键 组装 ... -
WinDebug+虚拟机---调试驱动的配置
2014-02-28 13:47 3288关键字:WinDebug+虚拟机---调试驱动的配置 ... -
Linux下Java环境的安装和配置
2011-07-08 22:30 1269关键字:Linux下Java环境的安装和配置 一、下载JDK ... -
Linux CentOS系统中文乱码问题解决方案
2011-07-07 14:03 1085关键字:Linux CentOS 5.3系统中文乱码问题 ... -
CentOS yum安装Apache + PHP + MySQL + Tomcat
2011-06-17 17:33 2191关键字:CentOS yum安装Apache + PHP + ... -
Word2007不能同时打开两份文档
2011-05-12 13:17 1430[问题症状]: 1、无法同时打开多个文件; 2 ... -
控制面板 任务计划 定期任务策略
2011-04-03 04:47 955在控制面板 》任务计划 里可以完成你的定期计划。 -
windows系统优化及提速
2011-03-21 21:17 1449<!-- google_ad_client = &qu ... -
SSH软件访问AIX系统及实时监控某个文件
2011-02-23 12:58 1600关键字:SSH软件访问AIX系统 说明:如果是内网本机无法访问 ... -
windows 网络检测命令
2011-02-15 00:04 2928windows 网络检测命令 ... -
net user 相关命令
2010-12-11 12:30 1615关键字:net user 命令 ... -
Aix系统客户端之SSH
2010-12-03 16:05 1461附件是:Aix系统客户端之SSH,及另一个Aix客户端(跟飞秋 ... -
您忘记了密码?
2010-11-28 16:03 1176在日常操作中,我们经 ... -
windows忘记密码解决方案
2010-11-28 15:59 1334解决方法一、用net 命令(假设忘记密码的用户名为abcd)& ... -
Windows XP中必须启用的10个服务
2010-11-28 14:01 12341: DNS Client 这一 ...
相关推荐
根据提供的信息,《Professional Linux Programming》是一本针对有一定基础的Linux开发者和系统管理员的专业书籍,它由Jon Masters和Richard Blum共同编写。此书由Wiley Publishing出版,全书共有507页,提供了深入...
【Linux网络实验指导书RedHat Linux 9的安装和初步认识】 Linux操作系统是开源软件的典范,由Linux Torvalds于1991年开发,以其稳定性和灵活性著称。Red Hat Linux 9是Red Hat公司发布的一个版本,它包含了丰富的...
#### 一、认识Linux **Linux** 是一种开源的类Unix操作系统,它基于**GNU**项目下的自由软件,并以其核心部分——**Linux 内核**而闻名。内核作为操作系统的核心组件,负责管理和协调硬件资源与软件之间的交互。...
通过本次实验,不仅能学习到Linux的安装过程,还能理解不同安装方式的优缺点,同时对虚拟机的使用和分区管理有了更深入的认识。尽管实验过程中可能会遇到硬件兼容性、操作系统操作等问题,但这些问题的解决过程本身...
通过本次Linux网络实验,学生不仅能够掌握Linux操作系统的使用,还能进一步了解网络管理的基础知识,为未来深入学习Linux服务器管理和网络运维打下坚实基础。实践中不断探索,理论结合实际,将是提升技能的关键。
Linux操作系统以其开源、稳定和强大的特性被广泛应用于各种领域。本文将围绕Linux的基础知识展开,包括系统安装、Shell命令、文件操作、硬件管理、网络配置、系统服务、用户管理、系统安全、脚本编程、编译工具以及...
- /swap:作为交换分区,相当于Linux的虚拟内存,当物理内存不足时,会使用这部分磁盘空间。 - /:根目录,包含了Linux系统的核心文件和目录,如usr、var、home等。 实验注意事项: - 对于安装过程中的不熟悉环节...
文档提到了硬盘分区的一些标识,例如LINUXSWAP(交换分区),以及(hd0,0)、(hd0,4)这样的分区标识,这些通常指的是硬盘上的分区位置。这些分区标识对于设置Grub的启动参数非常关键,因为它要指明内核和初始化内存盘...
Linux主机规划与磁盘分区涉及了多个方面的知识点,主要包括磁盘的硬件连接方式、Linux系统下磁盘装置档名的命名规则、磁盘的物理组成以及磁盘分区的基本概念。在理解这些内容时,需要对计算机硬件和Linux系统有一定...
- **swap分区**:作为虚拟内存使用,用于扩展物理内存容量。 - **根分区**:存放系统核心文件和配置文件等。 #### Linux目录结构 - **树状结构**:理解Linux目录结构采用的是树形结构,其中/为根目录。 - **文件...
**CentOS系统安装详解** CentOS是一款基于Linux的开源操作系统,深受企业和...在实际操作中,可能还需要学习更多关于Linux的命令行使用、系统管理以及网络服务配置等相关知识,这些都是Linux系统管理和运维的基础。
4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台类型 (1)解压文件 #tar jxvf u-boot-1.3.1.tar.bz2 (2)进入 U-Boot源码目录 #cd u-boot-1.3.1 (3)创建自己的开发板...