linuxswapin
使用proc文件系统中的smaps来查找这个问题。下边是一个列出所有进程占用swap分区情况的列表。可以通过简单修改就可以用于统计在/proc/$PID/smaps查出。以下是脚本:
复制代码代码如下:
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 ;done |sort -k2nr
❷ Linux系统中的swap分区 怎么弄了,电脑启动的时候会被挂载吗
swap这个是交换分区 ,相当于win下的的虚拟内存。会自己挂载的,lz的问题没遇到过。帮顶下等高手来解答吧
❸ 怎样分析linux的性能指标
LR
监控
UNIX/Linux
系统方法
一、准备工作:
1.
可以通过两种方法验证服务器上是否配置
rstatd
守护程序:
①使用
rup
命令,它用于报告计算机的各种统计信息,其中就包括
rstatd
的配置信息。使用命
令
rup
10.130.61.203,
此处
10.130.61.203
是要监视的
linux/Unix
服务器的
IP
,如果该命令返回相关的
统计信息。则表示已经配置并且激活了
rstatd
守护进程;若未返回有意义的统计信息,或者出现一
条错误报告,则表示
rstatd
守护进程尚未被配置或有问题。
②使用
find
命令
#find / -name rpc.rstatd,
该命令用于查找系统中是否存在
rpc.rstatd
文件,如果没有,说明系统没
有安装
rstatd
守护程序。
2
.
linux
需要下载
3
个包:
(
1
)
rpc.rstatd-4.0.1.tar.gz
(
2
)
rsh-0.17-14.i386.rpm
(
3
)
rsh-server-0.17-14.i386.rpm
3
.下载并安装
rstatd
如果服务器上没有安装
rstatd
程序(一般来说
LINUX
都没有安装)
,需要下载一个包才有这个服
务
,
包
名
字
是
rpc.rstatd-4.0.1.tar.gz.
这
是
一
个
源
码
,
需
要
编
译
,
下
载
并
安
装
rstatd
(
可
以
在
http://sourceforge.net/projects/rstatd
这个地址下载)下载后,开始安装,安装步骤如下:
tar -xzvf rpc.rstatd-4.0.1.tar.gz
cd rpc.rstatd-4.0.1/
./configure
—配置操作
make
—进行编译
make install
—开始安装
rpc.rstatd
—启动
rstatd
进程
“
rpcinfo -p
”命令来查看当前系统是否已经启动了
rstatd
守护进程
只要保证
Linux
机器上的进程里有
rstatd
和
xinetd
这二个服务就可以用
LR
去监视了,通过以下
两点可以检查是否启动:
1
)检查是否启动
: rsh server
监听的
TCP
是
514
。
[root@mg04 root]# netstat -an |grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
如果能看到
514
在监听说明
rsh
服务器已经启动。
2
)检查是否启动
: rstatd
输入命令
: rpcinfo -p
如果能看到类似如下信息:
程序版本协议端口
100001
5
udp
937
rstatd
100001
4
udp
937
rstatd
100001
3
udp
937
rstatd
100001
2
udp
937
rstatd
100001
1
udp
937
rstatd
那就说明
rstatd
服务启动了
,(
当然这里也可以用
ps ax
代替
)
4
.安装
rsh
和
rsh-server
两个服务包方法
a.
卸载
rsh
# rpm
–
q
rsh----------
查看版本号
# rpm
-e
版本号
---------
卸载该版本。
b
.安装
# rpm
–
ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm
在启动
rpc.rstatd
时,
会报错
“
Cannot register service: RPC: Unable to receive; errno = Ction refused
”
。
解决方法如下:
# /etc/init.d/portmap start
# /etc/init.d/nfs start
然后再次启动
rpc.rstatd
就好了。
5
.安装
xinetd
方法:
①查看
xinetd
服务:
[root@localhost ~]# rpm -q xinetd
xinetd-2.3.14-10.el5
②安装
xinetd
服务:
[root@localhost ~]# yum install xinetd
如果安装不起
xinetd
服务,执行下列操作命令后再次执行
yum install xinetd
命令进行安装:
yum clean packages
清除缓存目录下的软件包
yum clean headers
清除缓存目录下的
headers
yum clean oldheaders
清除缓存目录下旧的
headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
清除缓存目录下的软件包
及旧的
headers
。
6
.启动
xinetd
服务:
在有的系统中,通过如下命令重启:
# service xinetd reload
# /sbin/service xinetd rstart
在
suse linux
中如下操作:
cd /etc/init.d/xinetd restart
2
)
安装完成后配置
rstatd
目标守护进程
xinetd,
它的主配置文件是
/etc/xinetd.conf ,
它里面内容是
一些如下的基本信息:
#
# xinetd.conf
#
# Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.
# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
#
defaults
{
log_type
= FILE /var/log/xinetd.log
log_on_success = HOST EXIT DURATION
log_on_failure = HOST ATTEMPT
#
only_from
= localhost
instances
= 30
cps
= 50 10
#
# The specification of an interface is interesting, if we are on a firewall.
# For example, if you only want to provide services from an internal
# network interface, you may specify your internal interfaces IP-Address.
#
#
interface
= 127.0.0.1
}
includedir /etc/xinetd.d
我们这里需要修改的是
/etc/xinetd.d/
下的三个
conf
文件
rlogin
,rsh,rexec
这三个配置文件
,
打这
三个文件里的
disable = yes
都改成
disable = no ( disabled
用在默认的
{}
中禁止服务
)
或是把
# default:
off
都设置成
on
这个的意思就是在
xinetd
启动的时候默认都启动上面的三个服务
!
说明:我自己在配置时,没有
disable = yes
这项,我就将
# default: off
改为:
default: on
,重启后
(cd /etc/init.d/./xinetd restart
)通过
netstat -an |grep 514
查看,没有返回。然后,我就手动在三个文
件中最后一行加入
disable
=
no
,再重启
xinetd
,再使用
netstat
-an
|grep
514
查看,得到
tcp
0
0
0.0.0.0:514 0.0.0.0:* LISTEN
结果,表明
rsh
服务器已经启动。
看到网上有的地方说使用如下命令:
# service xinetd reload
# /sbin/service xinetd rstart
不知道是在什么系统用的。
二、监控
linux
资源:
在
controller
中,将
System resource Graphs
中的
Unix resources
拖到右侧的监控区域中,并单击
鼠标右键选择“
Add
Measurements
”
,
在弹出的对话框中输入被监控的
linux
系统的
IP
地址,然后选
择需要监控的性能指标,并点击“确定”
,出现如下结果:
Monitor name :UNIX Resources. Cannot initialize the monitoring on 10.10.15.62.
Error while creating the RPC client. Ensure that the machine can be connected and that it runs the
rstat daemon (use rpcinfo utility for this verification).
Detailed error: RPC: Failed to create RPC client.
RPC-TCP: Failed to establish RPC server address.
RPC-TCP: Failed to communicate with the portmapper on host '10.10.15.62'.
RPC: RPC call failed.
RPC-TCP: recv()/recvfrom() failed.
RPC-TCP: Timeout reached. (entry point: CFactory::Initialize). [MsgId: MMSG-47190]
检查原因,发现是
Linux
系统中的防火墙开启了并且阻挡了
LoadRunner
监控
Linux
系统的资源,
因此要将防火墙关闭。
关闭防火墙:
[root@localhost ~]# /etc/init.d/iptables stop;
三、监控
UNIX
lr
监控
UNIX
,
UNIX
先启动一
rstatd
服务
以下是在
IBM AIX
系统中启动
rstatd
服务的方法:
1
.使用
telnet
以
root
用户的身份登录入
AIX
系统
2
.在命令行提示符下输入:
vi /etc/inetd.conf
3
.查找
rstatd
,找到
#rstatd
sunrpc_udp
udp
wait
root /usr/sbin/rpc.rstatd rstatd 100001 1-3
4
、将
#
去掉
5
、
:wq
保存修改结果
6
、命令提示符下输入:
refresh
–
s inetd
重新启动服务。
这样使用
loadrunner
就可以监视
AIX
系统的性能情况了。
注:在
HP UNIX
系统上编辑完
inetd.conf
后,重启
inetd
服务需要输入
inetd -c
UNIX
上也可以用
rup
命令查看
rstatd
程序是否被配置并激活
若
rstatd
程序已经运行,
重启时,
先查看进程
ps -ef |grep inet
,
然后杀掉进程,
再
refresh
–
s inetd
进行重启。
❹ linux swap交换空间不足怎么办
1、使用分区:
在安装OS时划分出专门的交换分区,空间大小要事先规划好,启动系统时自动进行mount。
这种方法只能在安装OS时设定,一旦设定好不容易改变,除非重装系统。
2、使用swapfile:(或者是整个空闲分区)
新建临时swapfile或者是空闲分区,在需要时设定为交换空间,最多可以增加8个swapfile。
交换空间的大小,与CPU密切相关,在i386系中,最多可以使用2GB的空间。
在系统启动后根据需要在2G的总容量下进行增减。
这种方法比较灵活,也比较方便,缺点是启动系统后需要手工设置。
以下是运用swapfile增加交换空间的步骤:
涉及到的命令:
free ---查看内存状态命令,可以显示memory,swap,buffer cache等的大小及使用状况;
dd ---读取,转换并输出数据命令;
mkswap ---设置交换区
swapon ---启用交换区,相当于mount
swapoff ---关闭交换区,相当于umount
步骤:
1、创建swapfile:
root权限下,创建swapfile,假设当前目录为"/",执行如下命令:
# dd if=/dev/zero of=swapfile bs=1024 count=500000
则在根目录下创建了一个swapfile,名称为“swapfile”,大小为500M,也可以把文件输出到自己想要的任何目录中,
个人觉得还是直接放在根目录下比较好,一目了然,不容易误破坏,放在其他目录下则不然了;
命令中选项解释:
---of:输出的交换文件的路径及名称;
---bs:块大小,单位byte,一般为1k即1024个byte;
---count:总块数即空间总大小,单位为块即k;
---if:读取的源空闲空间,为什么是zero,不清楚,先固定这么写吧;
2、将swapfile设置为swap空间
# mkswap swapfile
3、启用交换空间,这个操作有点类似于mount操作(个人理解):
# swapon swapfile
至此增加交换空间的操作结束了,可以使用free命令查看swap空间大小是否发生变化;
4、如果不再使用空间可以选择关闭交换空间,这个操作有点类似于umount操作(个人理解)::
# swapoff swapfile
使用这种方法在每次系统启动时都需要手动设置、开启swapfile,比较麻烦,解决方法:
在 /etc/rc.d/rc.local 文件的末行下追加加以下内容:(编辑这个文件当然是用vi了~)
/sbin/swapon /swapfile
保存后退出,这样在系统启动后,swap空间就会自动加载了;
总结:在安装OS时一定要规划后swap大小,通常为内存的2倍,但是要考虑到以后增加内存的可能,所以可以考虑设的稍大一些,想在虚拟机里面安装oracle10g,发现默认的swap交换空间不满足最低要求,因为我分配的物理内存是1G,那么就按照要求需要2G的swap交换空间,默认只有1G的交换空间。
添加swap交换空间的步骤如下:
第一步:确保系统中有足够的空间来用做swap交换空间,我使用的是KVM,准备在一个独立的文件系统中添加一个swap交换文件,在/opt/image中添加2G的swap交换文件
第二步:添加交换文件并设置其大小为2G,使用如下命令
[root@sense image]# dd if=/dev/zero of=/opt/image/swap bs=1024 count=2048000
过段时间就返回如下结果:
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 272.867 seconds, 7.7 MB/s
第三步:创建(设置)交换空间,使用命令mkswap
[root@sense image]# mkswap /opt/image/swap
Setting up swapspace version 1, size = 2097147 kB
第四步:检查现有的交换空间大小,使用命令free
[root@sense image]# free -m
total used free shared buffers cached
Mem: 1011 989 21 0 1 875
-/+ buffers/cache: 112 898
Swap: 1027 0 1027
或者检查meminfo文件
grep SwapTotal /proc/meminfo
第五步:启动新增加的2G的交换空间,使用命令swapon
[root@sense image]# swapon /opt/image/swap
第六步:确认新增加的2G交换空间已经生效,使用命令free
[[root@sense image]# free -m
total used free shared buffers cached
Mem: 1011 995 15 0 4 877
-/+ buffers/cache: 113 897
Swap: 3027 0 3027
或者检查meminfo文件
grep SwapTotal /proc/meminfo
第七步:修改/etc/fstab文件,使得新加的2G交换空间在系统重新启动后自动生效
在文件最后加入:
/opt/image/swap swap swap defaults 0 0
我的操作
[root@weblogic Server]# free
total used free shared buffers cached
Mem: 1785856 1753452 32404 0 38592 1036312
-/+ buffers/cache: 678548 1107308
Swap: 2064376 116 2064260
创建交换空间文件,1000M
[root@weblogic /]# dd if=/dev/zero of=/swapfile bs=1024 count=1000000
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 28.5423 seconds, 35.9 MB/s
[root@weblogic /]# mkswap swapfile
Setting up swapspace version 1, size = 1023995 kB
[root@weblogic /]# swapon swapfile 打开
[root@weblogic /]#swapoff swapfile 关闭
删除
swapoff swapfile
rm -rf swapfile
❺ linux下查看哪些进程在占用swap
1、使用top命令查看当前进程swap占用
2、使用脚本文件
#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
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"
注意:使用sudo或root权限来执行该脚本,不然的话非执行用户的进程的输出结果为0.
❻ Linux系统怎么调整swap分区大小
假如您不清楚swap到底是什么,或分区的概念,那么下面的过程对您来讲可能会有一定的风险。
自己扩大Swap也是比较方便的。您必须有root权限,过程中一定要很小心,一不小心就破坏了整个硬盘的数据,执行下面的过程之前您需要三思而行,错误后的后果由执行者自己承担,我这个script只是作为参考。
1.以root进入控制台
2. #swapoff -a #停止交换分区
3. #fdisk /dev/hda #swap所在硬盘的硬盘设备文档,可能会有所不同,您最好察看/etc/fstab 将有swap这一行的hd*后面的数字去掉
4. 在fdisk里自己操作,用d先删除swap分区,然后再n添加分区(添加时硬盘必须要有可用空间,空间大小的参数是柱面数cylinders,不是字节,您需要自己计算,p命令能够看到每柱面的字节数),然后再用t将新添的分区id改为82(linux swap类型),每一步后都用w将操作实际写入硬盘(没用w之前您的操作无效)。再说一遍,这步必须很小心,一弄错您的系统可能就坏了,数据丢失。
5. #mkswap /dev/hda6 #格式化swap分区,这里的hda6要看您加完后p命令显示的实际分区设备名
6. #swapon /dev/hda6 #看是否能够启动新的swap分区
7.修改/etc/fstab 中swap这一行的设备名如/dev/hda6(假如您没改变位置,一般是和以前相同的),让他启动时自己加载。需要注意的是,假如您这里原来是个 LABEL=SWAP-hda6这样的东西,那么您有两个选择:第一.将他改成实际的设备名,如:/dev/hda6。第二.不改变 /etc/fstab,在第5步中用的命令行需要稍有不同 #mkswap -L SWAP-hda6 /dev/hda6 就是说格式化时为swap分区加上LABEL,该功能只有在新的发行中才支持,能够用mkswap --help察看他是否支持-L option.
8.重启,一切ok
Linux系统中增加Swap分区大小
一、查看系统当前的分区情况:
>free -m
total used free shared buffers cached
Mem: 438 432 6 0 8 141
-/+ buffers/cache: 282 156
Swap: 2047 1375 671
二、创建用于交换分区的文件:如果要增加2G大小的交换分区,则命令写法如下,其中的 count 等于想要的块大小
>dd if=/dev/zero of=/home/swap bs=block_size count=number_of_block
dd if=/dev/zero of=/home/swap bs=1024 count=2048000
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 60.4492 seconds, 34.7 MB/s
三、设置交换分区文件:
>mkswap /home/swap
四、立即启用交换分区文件:
>swapon /home/swap
五、若要想使开机时自启用,则需修改文件/etc/fstab中的swap行:
/home/swap swap swap defaults 0 0
[root@test ~]# free -m
total used free shared buffers cached
Mem: 438 433 5 0 2
267
-/+ buffers/cache: 163 275
Swap: 4047 1465 2581
❼ linux swap分区原理
swap介绍
Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
本文内容包括:
Swap基本原理
突破128M Swap限制
Swap配置对性能的影响
Swap性能监视
有关Swap操作的系统命令
Swap基本原理
Swap的原理是一个较复杂的问题,需要大量的篇幅来说明。在这里只作简单的介绍,在以后的文章中将和大家详细讨论Swap实现的细节。
众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。
Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
计算机用户会经常遇这种现象。例如,在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数据,将其放进内存,然后接着运行。
需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
突破128M Swap限制
经常看到有些Linux(国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法?在说明“128M”这个数字的来历之前,先给问题一个回答:现在根本不存在128M的限制!现在的限制是2G!
Swap空间是分页的,每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。旧版本的Linux实现Swap空间时,用Swap空间的第一页作为所有Swap空间页的一个“位映射”(Bit map)。这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。这么说来,第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本(原来的版本是Swap_space ,现在的版本是swapspace2)。那么,如果说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s - 10 ) - 1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,如果认为1 MB=2^20 Byte的话,大小正好为128M。
之所以这样来实现Swap空间的管理,是要防止Swap空间中有坏块。如果系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。
现在的系统设计者认为:
现在硬盘质量很好,坏块很少。
就算有,也不多,只需要将坏块罗列出来,而不需要为每一页建立映射。
如果有很多坏块,就不应该将此硬盘作为Swap空间使用。
- vmstat 3
- procs memory swap io system cpu
- r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99
- 0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100
- 0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100
- …………
- 1234567
procs下的w
它表示当前(三秒钟之内)需要释放内存、交换出去的进程数量。memory下的swpd
它表示使用的Swap空间的大小。Swap下的si,so
si表示当前(三秒钟之内)每秒交换回内存(Swap in)的总量,单位为kbytes;so表示当前(三秒钟之内)每秒交换出内存(Swap out)的总量,单位为kbytes。- ` swapon -s ` Filename Type Size Used Priority
- /dev/hda9 partition 361420 0 3
- 123
于是,现在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。
Swap配置对性能的影响
分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。
如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。
通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。
另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。
系统性能监视
Swap空间的分配固然很重要,而系统运行时的性能监控却更加有价值。通过性能监视工具,可以检查系统的各项性能指标,找到系统性能的瓶颈。本文只介绍一下在Solaris下和Swap相关的一些命令和用途。
最常用的是Vmstat命令(在大多数Unix平台下都有这样一些命令),此命令可以查看大多数性能指标。
例如:
命令说明:
vmstat 后面的参数指定了性能指标捕获的时间间隔。3表示每三秒钟捕获一次。第一行数据不用看,没有价值,它仅反映开机以来的平均性能。从第二行开始,反映每三秒钟之内的系统性能指标。这些性能指标中和Swap有关的包括以下几项:
以上的指标数量越大,表示系统越忙。这些指标所表现的系统繁忙程度,与系统具体的配置有关。系统管理员应该在平时系统正常运行时,记下这些指标的数值,在系统发生问题的时候,再进行比较,就会很快发现问题,并制定本系统正常运行的标准指标值,以供性能监控使用。
另外,使用Swapon-s也能简单地查看当前Swap资源的使用情况。例如:
能够方便地看出Swap空间的已用和未用资源的大小。
应该使Swap负载保持在30%以下,这样才能保证系统的良好性能。
有关Swap操作的系统命令
增加Swap空间,分以下几步:
1)成为超级用户
$su - root
2)创建Swap文件
# dd if=/dev/zero of=swapfile bs=1024 count=65536
创建一个有连续空间的交换文件。
3)激活Swap文件
#/usr/sbin/swapon swapfile
swapfile指的是上一步创建的交换文件。 4)现在新加的Swap文件已经起作用了,但系统重新启动以后,并不会记住前几步的操作。因此要在/etc/fstab文件中记录文件的名字,和Swap类型,如:
/path/swapfile none Swap sw,pri=3 0 0
5)检验Swap文件是否加上
/usr/sbin/swapon -s
删除多余的Swap空间。
1)成为超级用户
2)使用Swapoff命令收回Swap空间。
#/usr/sbin/swapoff swapfile
3)编辑/etc/fstab文件,去掉此Swap文件的实体。
4)从文件系统中回收此文件。
#rm swapfile
5)当然,如果此Swap空间不是一个文件,而是一个分区,则需创建一个新的文件系统,再挂接到原来的文件系统上。
❽ linux 下如何更改swap的大小
swapoff 就关掉了swap 然后用fdisk删除swap分区, 然后用跟你磁盘格式相对应的磁盘工具将重新得到的空间扩充到你的现有分区中即可
# swapoff
# cfdisk /dev/sda1
图形化的界面 删除swap即可
如果你的系统是ext3格式的分区,那么可以将删除掉的swap占用的空间扩充到邻近的分区上,注意 这一步需要在livecd环境中进行
以livecd启动, 个人建议knoppix 比较好,注意 以下的是我在虚拟机种测试的输出, 请按照你的实际情况来操作, 千万不可完全的照搬,否则一定会损坏数据
P.S 这个建议现在虚拟机里面练习下,否则 以下操作对于新手来讲还是有一定难度的, 倒不如重新安装一遍来的快和安全,另外 不管内存多大, 适当预留一些swap谨防万一是个好的预防措施...
我个人是认为 没必要care这2g 除非你空间真的十分紧张
卸载sda1:
umount /dev/sda1
然后执行:
fsck -n /dev/sda1
输出:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1080014/1536000 blocks
然后是:
tune2fs -O ^has_journal /dev/sda1
输出:
tune2fs 1.38 (30-Jun-2005)
接下来运行:
fdisk /dev/sda
输出:
(Yes, it's /dev/sda, not /dev/sda1.)
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Type m to get a list of all commands:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only
我们来打印分区表:
Command (m for help): p
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
现在,删除第一个分区:
Command (m for help): d
Partition number (1-5): 1
然后创建一个新的sda1分区,大体事项和缩小分区步骤一:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1
现在就该确定最开始和末尾的柱面号,首先输出起始柱面号:
First cylinder (1-1305, default 1):
然后fdisk会告述我们可能的最大柱面号,在这里是1247,然后我们直接输入就行了:
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): 1247
然后看一下新的分区表:
Command (m for help): p
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
别忘了,之前的分区是启动分区,所以还需要做:
Command (m for help): a
Partition number (1-5): 1
最后写入:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
然后重新启动。还是启动到live-CD环境中(或者rescue模式),用su命令再次切换成root用户,然后运行:
fsck -n /dev/sda1
输出应该是这样的:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1047239/1536000 blocks
接下来,在新的/dev/sda1上创建日志文件,转换回ext3文件系统:
tune2fs -j /dev/sda1
tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.
好了,这下完成了。再次重启,启动到你原来的系统中,看看:
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 9859036 4224032 5234348 45% /
varrun 95480 132 95348 1% /var/run
varlock 95480 0 95480 0% /var/lock
udev 10240 52 10188 1% /dev
devshm 95480 0 95480 0% /dev/shm
lrm 95480 17580 77900 19% /lib/moles/2.6.17-10-generic/volatile
df -B 4k
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 2464759 1056008 1308587 45% /
varrun 23870 33 23837 1% /var/run
varlock 23870 0 23870 0% /var/lock
udev 2560 13 2547 1% /dev
devshm 23870 0 23870 0% /dev/shm
lrm 23870 4395 19475 19% /lib/moles/2.6.17-10-generic/volatile
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 5.0G 45% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/moles/2.6.17-10-generic/volatile
fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
fdisk -s /dev/sda1
10016496
❾ Linux中关于swap,虚拟内存和page的区别
以前的操作系统是实模式,例如dos。每个时候只有一个进程在跑,这个进程使用全部的物理内存。
后来发展到保护模式,分时多进程。一个CPU上跑多个进程, 但进程不知道到底有多少内存可以用,它能访问内存最大地址。例如16位系统就能访问2^16byte,32位就是2^32位。但是实际上没有那么多内存阿?怎么办?保护模式就应运而生了。
假设进程是一个刘祥,裁判(系统)一发令他就开始跑步。但是裁判说给你1秒,可以跑100米。于是刘祥开始跑步(内存地址),一秒后刘祥只跑了10米,裁判吹哨说:刘祥你先歇会,我要去给王军霞吹哨呢,现记住你跑到哪里了(保护),等会从这里开始。裁判给王军霞吹哨,一只跑一秒,回来再给刘祥吹哨再跑1秒,如此往复。开始跑步的人少,刘祥还可以站在跑道上休息。后来跑步的人越来越多,跑道都挤满了人,那么只能把一些人移动到跑道旁的草地上休息(交换)。后来发现有些人横七竖八的躺着,占了不少空间,于是规定每个人只能站着(page),这样可以容纳很多的人。
swap -- 草地,就是存放page的硬盘空间。
virtual memory -- 假设刘祥跑n圈就已经是到北京的距离了,可是他们还在原地。虚拟就是不存在的。
page -- 草地上的格,每次只容纳一个人。
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache.前者针对磁盘块的读写,后者针对文件inode的读写.这些Cache有效缩短了I/O系统调用(比如read,write,getdents)的时间.
内存活动基本上可以用3个数字来量化:活动虚拟内存总量,交换(swapping)率和调页(paging)率.其中第一个数字表明内存的总需求量,后两个数字表示那些内存中有多少比例正处在使用之中.目标是减少内存活动或增加内存量,直到调页率保持在一个可以接受的水平上为止.
活动虚拟内存的总量(VM)=实际内存大小(size of real memory)(物理内存)+使用的交换空间大小(amount of swap space used)
当程序运行需要的内存大于物理内存时,UNIX系统采用了调页机制,即系统一些内存中的页面到磁盘上,腾出来空间供进程使用。
大多数系统可以忍受偶尔的调页,但是频繁的调页会使系统性能急剧下降。
UNIX内存管理:UNIX系统通过2种方法进行内存管理,“调页算法”,“交换技术”。
调页算法是将内存中最近不常使用的页面换到磁盘上,把常使用的页面(活动页面)保留在内存中供进程使用。
交换技术是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发生一些交换过程。
当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘I/O的负载。进一步降低了系统对作业的执行速度,即系统I/O资源问题又会影响到内存资源的分配。
Unix的虚拟内存
Unix的虚拟内存是一个十分复杂的子系统,它实现了进程间代码与数据共享机制的透明性,并能够分配比系统现有物理内存更多的内存,某些操作系统的虚存甚至能通过提供缓存功能影响到文件系统的性能,各种风格的UNIX的虚存的实现方式区别很大,但都离不开下面的4个概念。
1:实际内存
实际内存是指一个系统中实际存在的物理内存,称为RAM。实际内存是存储临时数据最快最有效的方式,因此必须尽可能地分配给应用程序,现在的RAM的形式有多种:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用纠错机制(ECC)。
2:交换空间
交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。
3:页面调度
页面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Unix内存被平均划分成大小相等的页面;通常页面大小为4KB和8KB(在Solaris中可以用pagesize命令查看)。当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM交给其他需要它的程序使用。
4:交换
页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。
vmstat监视内存性能:该命令用来检查虚拟内存的统计信息,并可显示有关进程状态、空闲和交换空间、调页、磁盘空间、CPU负载和交换,cache刷新以及中断等方面的信息。
Procs
r: The number of processes waiting for run time.
运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
b: The number of processes in uninterruptable sleep.
处于不可中断状态的进程数,常见的情况是由IO引起的
w: The number of processes swapped out but otherwise runnable.
Memory
swpd: the amount of virtual memory used (kB).
free: the amount of idle memory (kB).
空闲的物理内存
buff: the amount of memory used as buffers (kB).
作为buffer cache的内存,对块设备的读写进行缓冲
cache: the amount of memory used as cache.
Swap
si: Amount of memory swapped in from disk (kB/s). 虚拟内存的页导入(从SWAP DISK导入RAM)
so: Amount of memory swapped to disk (kB/s). 虚拟内存的页导出.
❿ Linux查看占用swap的进程脚本
linux查看占用swap的进程脚本01#!/bin/bash0203##############################################################################04#
脚本功能
:
列出正在占用swap的进程。05###############################################################################0607echo
-e
PID/t/tSwap/t/tProc_Name0809#
拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)10for
pid
in
`ls
-l
/proc
|
grep
^d
|
awk
'{
print
$9
}'|
grep
-v
[^0-9]`11do12
#
让进程释放swap的方法只有一个:就是重启该进程。或者等其自动释放。放13
#
如果进程会自动释放,那么我们就不会写脚本来找他了,找他都是因为他没有自动释放。14
#
所以我们要列出占用swap并需要重启的进程,但是init这个进程是系统里所有进程的祖先进程15
#
重启init进程意味着重启系统,这是万万不可以的,所以就不必检测他了,以免对系统造成影响。16
if
[
$pid
-eq
1
];then
continue;fi17
grep
-q
Swap
/proc/$pid/smaps
2>/dev/null18
if
[
$?
-eq
0
];then19
swap=$(grep
Swap
/proc/$pid/smaps
/20
|
gawk
'{
sum+=$2;}
END{
print
sum
}')21
proc_name=$(ps
aux
|
grep
-w
$pid
|
grep
-v
grep
/22
|
awk
'{
for(i=11;i<=NF;i++){
printf(%s
,$i);
}}')23
if
[
$swap
-gt
0
];then24
echo
-e
${pid}/t${swap}/t${proc_name}25
fi26
fi27done
|
sort
-k2
-n
|
awk
-F'/t'
'{28
pid[NR]=$1;29
size[NR]=$2;30
name[NR]=$3;31}32END{33
for(id=1;id<=length(pid);id++)34
{35
if(size[id]<1024)36
printf(%-10s/t%15sKB/t%s/n,pid[id],size[id],name[id]);37
else
if(size[id]<1048576)38
printf(%-10s/t%15.2fMB/t%s/n,pid[id],size[id]/1024,name[id]);39
else40
printf(%-10s/t%15.2fGB/t%s/n,pid[id],size[id]/1048576,name[id]);41
}42}'