centos/linux 下安装监控工具 sar,iosta,syssta
2012-03-30 16:57
971 查看
通过IOStat命令监控IO性能
iostat - CPU平均负载,硬盘活动
# iostat
Linux 2.6.18-274.el5xen (uiddev1) 2012年04月05日
avg-cpu: %user %nice %system %iowait %steal %idle
0.78 0.37 0.88 1.01 0.01 96.96
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 18.18 554.48 270.75 2549242 1244764
iostat命令可报告中央处理器(CPU)的统计信息,各种设备、分区及网络文件系统输入/输出的统计信息。
tcpdump -i eth0 'tcp port 80'
查看设备使用率(%util)、响应时间(await)
[b]iostat -d -x -k 1 1
[/b]
安装监控工具 sysstat
yum -y install sysstat
如果在redhat下面用rpm包安装的话可以先去系统盘或则是http://rpmfind.net/查找 sysstat相对应的rpm包
1. 基本使用
$iostat -d -k 1 10
参数
-d 表示,显示设备(磁盘)使用状态;
-k某些使用block为单位的列强制使用Kilobytes为单位;
1 10表示,数据显示每隔1秒刷新一次,共显示10次。
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 39.29 21.14 1.44 441339807 29990031
sda1 0.00 0.00 0.00 1623 523
sda2 1.32 1.43 4.54 29834273 94827104
sda3 6.30 0.85 24.95 17816289 520725244
sda5 0.85 0.46 3.40 9543503 70970116
sda6 0.00 0.00 0.00 550 236
sda7 0.00 0.00 0.00 406 0
sda8 0.00 0.00 0.00 406 0
sda9 0.00 0.00 0.00 406 0
sda10 60.68 18.35 71.43 383002263 1490928140
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 327.55 5159.18 102.04 5056 100
sda1 0.00 0.00 0.00 0 0
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
2.-x参数
# iostat -x 1 1
Linux 2.6.18-274.el5xen (uid) 2012年04月01日
avg-cpu: %user %nice %system %iowait %steal %idle
0.83 0.03 0.63 0.59 0.01 97.92
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 2.02 17.98 5.01 5.52 264.50 187.97 42.99 0.26 24.96 2.78 2.93
sda1 0.08 0.00 0.01 0.00 0.18 0.00 27.97 0.00 3.50 3.17 0.00
sda2 1.93 17.98 5.00 5.52 264.30 187.97 43.00 0.26 24.98 2.78 2.93
dm-0 0.00 0.00 6.91 23.50 264.20 187.97 14.87 0.57 18.85 0.96 2.93
dm-1 0.00 0.00 0.01 0.00 0.06 0.00 8.00 0.00 4.86 1.90 0.00
rrqm/s:队列中每秒钟合并的读请求数量
wrqm/s:队列中每秒钟合并的写请求数量
r/s:每秒钟完成的读请求数量
w/s:每秒钟完成的写请求数量
rsec/s:每秒钟读取的扇区数量
wsec/s:每秒钟写入的扇区数量
avgrq-sz:平均请求数据的大小
avgqu-sz:平均请求队列的长度
await:平均每次请求的等待时间
svctm:平均每次请求的服务时间
util:设备的利用率,该参数暗示了设备的繁忙程度
分析
1.如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
2.如果 idle 小于 70% IO压力就较大了,一般读取速度有较多的wait。
3.同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
4.另外还可以参考
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核
elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
###############
#
# 例子解释
#
###############
I/O 系统 vs. 超市排队
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连 钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数
3. -c 参数
iostat还可以用来获取cpu部分状态值:
iostat -c 1 10
avg-cpu: %user %nice %sys %iowait %idle 1.98 0.00 0.35 11.45 86.22 avg-cpu: %user %nice %sys %iowait %idle 1.62 0.00 0.25 34.46 63.67
4. 常见用法
#查看TPS和吞吐量信息
$iostat -d -k 1 10
#查看设备使用率(%util)、响应时间(await)
iostat -d -x -k 1 1
5. 实例分析
$$iostat -d -k 1 |grep sda10
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda10 60.72 18.95 71.53 395637647 1493241908
sda10 299.02 4266.67 129.41 4352 132
sda10 483.84 4589.90 4117.17 4544 4076
sda10 218.00 3360.00 100.00 3360 100
sda10 546.00 8784.00 124.00 8784 124
sda10 827.00 13232.00 136.00 13232 136
上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。
iostat -d -x -k 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1.56 28.31 7.84 31.50 43.65 3.16 21.82 1.58 1.19 0.03 0.80 2.61 10.29
sda 1.98 24.75 419.80 6.93 13465.35 253.47 6732.67 126.73 32.15 2.00 4.70 2.00 85.25
sda 3.06 41.84 444.90 54.08 14204.08 2048.98 7102.04 1024.49 32.57 2.10 4.21 1.85 92.24
可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了。
Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。
6、IOStat信息的获得
使用strace命令能跟踪到答案:
# strace -eopen iostat
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧。大多数Linux发行版本都装备了大量的监控工具。这些工具提供了能用作取得相关信息和系统活动的量度指标。你能使用这些工具发现造成性能问题可能原因。此次讨论到的工具只是分析和调试服务器下面问题时最基本工具中的一部分。
1.找出瓶颈
2.硬盘(存储)瓶颈
3.CPU及内存瓶颈
4.网络瓶颈
# top
top - 10:38:49 up 2:07, 1 user, load average: 0.21, 0.07, 0.06
Tasks: 202 total, 2 running, 200 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7793040k total, 4227764k used, 3565276k free, 98264k buffers
Swap: 10223608k total, 0k used, 10223608k free, 3165244k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4474 oracle 16 0 264m 33m 14m S 0.7 0.4 0:01.92 emagent
26867 root 15 0 12760 1188 828 R 0.3 0.0 0:00.92 top
1 root 15 0 10368 684 572 S 0.0 0.0 0:00.21 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.04 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。
用法: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
-b : 批次模式运行。通常用作来将top的输出的结果传送给其他程式或储存成文件。
-c : 显示执行任务的命令行。
-d : 设定延迟时间
-h : 帮助
-H : 显示线程。当这个设定开启时,将显示所有进程产生的线程。
-i : 显示空闲的进程。
-n : 执行次数。一般与-b搭配使用
-u : 监控指定用户相关进程
-U : 监控指定用户相关进程
-p : 监控指定的进程。当监控多个进程时,进程ID以逗号分隔。这个选项只能在命令行下使用。
-s : 安全模式操作
-S : 累计时间模式
-v : 显示top版本,然后退出。
-M : 自动显示内存单位(k/M/G)
# top
top - 11:26:26 up 2:54, 1 user, load average: 0.04, 0.09, 0.07
Tasks: 207 total, 1 running, 206 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.6%us, 0.6%sy, 0.2%ni, 98.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7793040k total, 4249072k used, 3543968k free, 102040k buffers
Swap: 10223608k total, 0k used, 10223608k free, 3168776k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2291 root 15 0 12756 1072 728 R 2.0 0.0 0:00.01 top
栏位信息
在top中,分别使用26个英文字母对应进程相关信息栏位。可已通过f来添加或移除指定的栏位,通过o来调整对栏位显示顺序。下面我们针对这些栏位进行说明。
a: PID (Process Id):任务的进程ID
b: PPID (Parent Process Pid):父任务的进程ID
c: RUSER (Real User Name):任务的所有者真实名称
d: UID (User Id):任务所有者ID
e: USER (User Name):任务所有者名称
f: GROUP (Group Name):任务所有者群组名
g: TTY (Controlling Tty):终端
h: PR (Priority):优先级
i: NI (Nice value):Nice值
j: P (Last used CPU (SMP)):
k: %CPU (CPU usage):CPU使用率
TIME (CPU Time):CPU时间
TIME+ (CPU Time, hundredths):CPU时间,精确到秒
%MEM (Memory usage (RES)):内存使用率
VIRT (Virtual Image (kb)):虚拟内存。VIRT = SWAP + RES
p: SWAP (Swapped size (kb)):交换空间
q: RES (Resident size (kb)):常驻内存。RES = CODE + DATA
r: CODE (Code size (kb)):
s: DATA (Data+Stack size (kb)):
t: SHR (Shared Mem size (kb)):共享内存。
u: nFLT (Page Fault count):
v: nDRT (Dirty Pages count):
w: S (Process Status):进程状态
分别有以下几种:
D = uninterruptible sleep = 不可被唤醒睡眠
R = running = 正在运行中
S = sleeping = 睡眠状态
T = traced or stopped = 出错或停止状态
Z = zombie = 僵尸状态
x: Command (Command line or Program name):进程名或命令行
y: WCHAN (Sleeping in Function):
z: Flags (Task Flags):
网站的很多性能问题最终都会归结到IO头上,所以说理解iostat命令是非常有必要的。
小技巧:你知道iostat是从哪里得到IO相关信息的吗?使用strace命令能跟踪到答案:
注:Strace教程:5 simple ways to troubleshoot using Strace
注:关于diskstats的说明,参见官方文档(主要是其中的field1 ~ field11部分)。
如果你的操作系统里没有iostat命令的话,除了从源代码安装,还可以使用下面方式:
Centos/Fedora的安装方式是:yum install sysstat
Debian/Ubuntu的安装方式是:aptitude install sysstat
我最常用的iostat命令格式是:『iostat -dx 1』,意思是每隔一秒显示一次IO扩展信息。
注:开头显示的是自系统启动开始的平均值,后面显示的是每段时间间隔里的平均值。
介绍一下相关参数的含义:
rrqm/s:队列中每秒钟合并的读请求数量
wrqm/s:队列中每秒钟合并的写请求数量
r/s:每秒钟完成的读请求数量
w/s:每秒钟完成的写请求数量
rsec/s:每秒钟读取的扇区数量
wsec/s:每秒钟写入的扇区数量
avgrq-sz:平均请求扇区的大小
avgqu-sz:平均请求队列的长度
await:平均每次请求的等待时间
svctm:平均每次请求的服务时间
util:设备的利用率
注:建议对照源代码来记忆这些参数都是如何计算出来的。
关于这些参数,相对重要的是后面几个,具体来说是:util,svctm,await,avgqu-sz:
util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对)。有时候会出现大于100%的情况,这是因为读取数据的时候是非原子操作。
svctm是平均每次请求的服务时间。从源代码里可以看出:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。
await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好。
说明:svctm参数在未来某个版本的iostat会被删除,官方文档是这样描述原因的:
The average service time (svctm field) value is meaningless, as I/O statistics are calculated at block level, and we don’t know when the disk driver starts to process a request. For this reason, this field will be removed in a future sysstat version.
另外,有时候iostat会显示一些很离谱的结果,官方FAQ给出了如下的解释:
Because of a Linux kernel bug, iostat -x may display huge I/O response times (svctm) and a bandwidth utilization (%util) of 100% for some devices. Indeed these devices have a value for the field #9 (beginning after the device name) in /proc/{partitions,diskstats}
which is always different from 0, and even negative sometimes. Yet this field should go to zero, since it gives the number of I/Os currently in progress (it is incremented as requests are submitted, and decremented as they finish). To (temporarily) solve the
problem, you should reboot your system to reset the counters in /proc/{partitions,diskstats}.
如果大家想要更系统的了解关于IO的相关知识,可以参考如下资料:
Getting the hang of IOPS
Basic I/O Monitoring on Linux
http://www.orczhou.com/index.php/2010/03/iostat-detail/
1、内存
方法一:
直接查看 /proc/meminfo 文件
[root@yunwei2 ~]# cat /proc/meminfo
MemTotal: 4033580 kB
MemFree: 2261836 kB
Buffers: 198080 kB
Cached: 1129164 kB
SwapCached: 0 kB
Active: 683092 kB
Inactive: 930404 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 4033580 kB
LowFree: 2261836 kB
SwapTotal: 6094840 kB
SwapFree: 6094840 kB
Dirty: 40 kB
Writeback: 0 kB
AnonPages: 286196 kB
Mapped: 33416 kB
Slab: 118932 kB
PageTables: 8676 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 8111628 kB
Committed_AS: 525248 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 266040 kB
VmallocChunk: 34359472139 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
方法二:
使用 free -m 命令查看,如下:
free -m
total used free shared buffers cached
Mem: 3939 1725 2213 0 189 1102
-/+ buffers/cache: 433 3505
Swap: 5951 0 5951
total 内存总数:M
used 已经使用的内存数: M
free 空闲的内存数:M
shared 当前已经废弃不用的内存数,总是M
-buffers/cache反映的是被程序实实在在用掉的内存
buffers/cache反映的是可以使用用的内存总数,这里只剩余 M
方法三:
使用 top 命令也可以看到实时的内存使用情况。
2、
如何查看CPU类型以及相关特性?
方法一:
Linux下CPU相关的参数保存在 /proc/cpuinfo 文件里,
查看文件内容,即可知道CPU相关的技术参数。
方法二:
采用命令 dmesg | grep CPU 可以查看到相关CPU的启动信息
查看CPU的位数可以这样 getconf LONG_BIT,不是32位就是64位了:)
linux查看cpu个数命令
cat /proc/cpuinfo 我记得里面有
LINUX下查看CPU负载的所有命令
$
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2260164 198756 1129164 0 0 2 1 4 21 0 0 100 0 0
procs 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态us 列显示了用户方式下所花费 CPU 时间的百分比。
us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。
这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 id 列显示了cpu处在空闲状态的时间百分比 system 显示采集间隔内发生的中断数in 列表示在某一时间间隔中观测到的每秒设备中断数。cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。memoryswpd
切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常 free 当前的空闲页面列表中内存数量(k表示) buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。 cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。 swapsi 由内存进入内存交换区数量。so由内存交换区进入内存数量。
IObi 从块设备读入数据的总量(读磁盘)(每秒kb)。bo 块设备写入数据的总量(写磁盘)(每秒kb)这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
1、如何查看CPU类型以及相关特性?
方法一:
Linux下CPU相关的参数保存在 /proc/cpuinfo 文件里,
查看文件内容,即可知道CPU相关的技术参数。
方法二:
采用命令 dmesg | grep CPU 可以查看到相关CPU的启动信息
查看CPU的位数可以这样 getconf LONG_BIT,不是32位就是64位了:)
2、如何查看内存大小以及使用情况?
方法一:
直接查看 /proc/meminfo 文件
方法二:
使用 free -m 命令查看,如下:
[root@miix proc]# free -m
total used free shared buffers cached
Mem: 748 738 9 0 121 304
-/+ buffers/cache: 313 435
Swap: 768 0 768
可以看到总内存为748M,使用了738M,空闲9M,交换空间768M还没使用。
其实我的物理内存是768M的,一些内存和显卡共享了。
方法三:
使用 top 命令也可以看到实时的内存使用情况。
3、如何查看硬盘型号以及相关参数?
方法一:
fdisk -l 可以看到系统上的磁盘(包括U盘)的分区以及大小相关信息。
方法二:
直接查看 /proc/partitions 文件。
方法三:
通过命令 hdparm -i /dev/hda 获取硬盘详细物理参数
4、如何查看网卡相关信息?
方法一:
ethtool eth0 采用此命令可以查看到网卡相关的技术指标
(本人测试过不一定所有网卡都支持此命令)
ethtool -i eth1 加上 -i 参数查看网卡驱动
可以尝试其它参数查看网卡相关技术参数
方法二:
也可以通过 dmesg | grep eth0 等看到网卡名字(厂家)等信息
通过查看 /etc/sysconfig/network-.s/ifcfg-eth0
可以看到当前的网卡配置包括IP、网关地址等信息。
当然也可以通过ifconfig命令查看。
5、如何查看USB设备相关信息?
方法一:
其实通过 fdisk -l 命令可以查看到接入的U盘信息,本人的U盘信息如下:
Disk /dev/sda: 2012 MB, 2012217344 bytes
16 heads, 32 sectors/track, 7676 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
Device BootStartEndBlocksId System
/dev/sda1* 16 7676 1961024 b W95 FAT32
U盘的设备文件是 /dev/sda,2G大小,FAT32格式。
如果用户登陆的不是Linux图形界面,U盘不会自动挂载上来。
此时可以通过手工挂载(mount):
mount /dev/sda1 mount_point
以上命令将U盘挂载到当前目录的 mount_point 目录,注意挂的是 sda1 不是 sda。
卸载命令是 umount mount_point
Linux默认没有自带支持NTFS格式磁盘的驱动,但对FAT32支持良好,挂载的时候一般不需要 -t vfat 参数 。
如果支持ntfs,对ntfs格式的磁盘分区应使用 -t ntfs 参数。
如果出现乱码情况,可以考虑用 -o iocharset=字符集 参数。
可以通过 lsusb 命令查看 USB 设备信息哦:
[root@miix tmp]# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 002: ID 0951:1613 Kingston Technology
Bus 004 Device 001: ID 0000:0000
6、如何查看光盘相关信息?
方法一:
插入CD光碟后,在本人的RHEL5系统里,光碟文件是 /dev/cdrom,
因此只需 mount /dev/cdrom mount_point 即可。
[root@miix tmp]# mount /dev/cdrom mount_point
mount: block device /dev/cdrom is write-protected, mounting read-only
其实仔细看一下,光驱的设备文件是 hdc
[root@miix tmp]# ls -l /dev/cdrom*
lrwxrwxrwx 1 root root 3 01-08 08:54 /dev/cdrom -> hdc
lrwxrwxrwx 1 root root 3 01-08 08:54 /dev/cdrom-hdc -> hdc
因此我们也可以这样 mount /dev/hdc mount_point
如果光驱里没放入有效光盘,则报错:
[root@miix tmp]# mount /dev/hdc mount_point
mount: 找不到介质
7、如何挂载ISO文件?
方法:
mount -o loop *.iso mount_point
8、如何查看主板信息?
使用命令 lspci 即可
http://os.51cto.com/art/201003/187660.htm
测试机器的硬件信息:
查看CPU信息(型号)
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)
# cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(说明实际上是两颗4核的CPU)
# getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
8
(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)
再完整看cpu详细信息, 不过大部分我们都不关心而已.
# dmidecode | grep 'Processor Information'
查看内 存信息
# cat /proc/meminfo
# uname -a
Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)
# cat /etc/issue | grep Linux
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
(查看当前操作系统发行版信息)
查看机器型号
# dmidecode | grep "Product Name"
查看网卡信息
# dmesg | grep -i eth
我们通过Linux查看内存free命令查看机器空闲内存时,会发现free的值很小。下面我们就来了解学习下Linux查看内存的命令和对这些命令的解释,这样大家更能够深刻理解我们的Linux查看内存命令
在Linux下查看内存我们一般用free命令:
[root@scs-2 tmp]# free
total used free shared buffers cached
Mem: 3266180 3250004 16176 0 110652 2668236
-/+ buffers/cache: 471116 2795064
Swap: 2048276 80160 1968116
下面是对Linux查看内存命令中这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
Linux查看内存命令时如何看额定值:
cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfo
MemTotal: 3266180 kB
MemFree: 17456 kB
Buffers: 111328 kB
Cached: 2664024 kB
SwapCached: 0 kB
Active: 467236 kB
Inactive: 2644928 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 3266180 kB
LowFree: 17456 kB
SwapTotal: 2048276 kB
SwapFree: 1968116 kB
Dirty: 8 kB
Writeback: 0 kB
Mapped: 345360 kB
Slab: 112344 kB
Committed_AS: 535292 kB
PageTables: 2340 kB
VmallocTotal: 536870911 kB
VmallocUsed: 272696 kB
VmallocChunk: 536598175 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
用free -m查看的结果:
[root@scs-2 tmp]# free -m
total used free shared buffers cached
Mem: 3189 3173 16 0 107 2605
-/+ buffers/cache: 460 2729
Swap: 2000 78 1921
查看/proc/kcore文件的大小(内存镜像):
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
备注:
占用内存的测量
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
Linux查看内存命令的输出解释
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 \
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 04
查看机器可用内存
/proc/28248/>free
total used free shared buffers cached
Mem: 1023788 926400 97388 0 134668 503688
-/+ buffers/cache: 288044 735744
Swap: 1959920 89608 1870312
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
查看内存
所以 空闲内存=free+buffers+cached=total-used
显示每个插槽,及插槽中内存的信息
/usr/sbin/dmidecode | grep -A 16 "Memory Device"
查看简要内存信息
/usr/sbin/dmidecode | grep -A 16 "Memory Device" | grep -E "Size|Locator" | grep -v Bank
查看cpu
显示每个cpu的详细信息
/usr/sbin/dmidecode | grep -A55 'Processor Information'
显示cpu简要信息
/usr/sbin/dmidecode | grep -A55 'Processor Information' | grep -E "Socket|Version" 查看扩展卡
/usr/sbin/dmidecode | grep -A3 "On Board Device"
查看网卡速率
dmesg | grep ^eth
Linux man iostat
How Linux iostat computes its results
Linux iostat
http://blog.chinaunix.net/u3/93062/showart_1934431.html
原文:http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
翻译:飞哥 (http://hi.baidu.com/imlidapeng)
iostat - CPU平均负载,硬盘活动
# iostat
Linux 2.6.18-274.el5xen (uiddev1) 2012年04月05日
avg-cpu: %user %nice %system %iowait %steal %idle
0.78 0.37 0.88 1.01 0.01 96.96
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 18.18 554.48 270.75 2549242 1244764
iostat命令可报告中央处理器(CPU)的统计信息,各种设备、分区及网络文件系统输入/输出的统计信息。
tcpdump -i eth0 'tcp port 80'
查看设备使用率(%util)、响应时间(await)
[b]iostat -d -x -k 1 1
[/b]
安装监控工具 sysstat
yum -y install sysstat
如果在redhat下面用rpm包安装的话可以先去系统盘或则是http://rpmfind.net/查找 sysstat相对应的rpm包
1. 基本使用
$iostat -d -k 1 10
参数
-d 表示,显示设备(磁盘)使用状态;
-k某些使用block为单位的列强制使用Kilobytes为单位;
1 10表示,数据显示每隔1秒刷新一次,共显示10次。
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 39.29 21.14 1.44 441339807 29990031
sda1 0.00 0.00 0.00 1623 523
sda2 1.32 1.43 4.54 29834273 94827104
sda3 6.30 0.85 24.95 17816289 520725244
sda5 0.85 0.46 3.40 9543503 70970116
sda6 0.00 0.00 0.00 550 236
sda7 0.00 0.00 0.00 406 0
sda8 0.00 0.00 0.00 406 0
sda9 0.00 0.00 0.00 406 0
sda10 60.68 18.35 71.43 383002263 1490928140
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 327.55 5159.18 102.04 5056 100
sda1 0.00 0.00 0.00 0 0
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
2.-x参数
# iostat -x 1 1
Linux 2.6.18-274.el5xen (uid) 2012年04月01日
avg-cpu: %user %nice %system %iowait %steal %idle
0.83 0.03 0.63 0.59 0.01 97.92
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 2.02 17.98 5.01 5.52 264.50 187.97 42.99 0.26 24.96 2.78 2.93
sda1 0.08 0.00 0.01 0.00 0.18 0.00 27.97 0.00 3.50 3.17 0.00
sda2 1.93 17.98 5.00 5.52 264.30 187.97 43.00 0.26 24.98 2.78 2.93
dm-0 0.00 0.00 6.91 23.50 264.20 187.97 14.87 0.57 18.85 0.96 2.93
dm-1 0.00 0.00 0.01 0.00 0.06 0.00 8.00 0.00 4.86 1.90 0.00
rrqm/s:队列中每秒钟合并的读请求数量
wrqm/s:队列中每秒钟合并的写请求数量
r/s:每秒钟完成的读请求数量
w/s:每秒钟完成的写请求数量
rsec/s:每秒钟读取的扇区数量
wsec/s:每秒钟写入的扇区数量
avgrq-sz:平均请求数据的大小
avgqu-sz:平均请求队列的长度
await:平均每次请求的等待时间
svctm:平均每次请求的服务时间
util:设备的利用率,该参数暗示了设备的繁忙程度
分析
1.如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
2.如果 idle 小于 70% IO压力就较大了,一般读取速度有较多的wait。
3.同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
4.另外还可以参考
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核
elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
###############
#
# 例子解释
#
###############
I/O 系统 vs. 超市排队
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连 钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数
3. -c 参数
iostat还可以用来获取cpu部分状态值:
iostat -c 1 10
avg-cpu: %user %nice %sys %iowait %idle 1.98 0.00 0.35 11.45 86.22 avg-cpu: %user %nice %sys %iowait %idle 1.62 0.00 0.25 34.46 63.67
4. 常见用法
#查看TPS和吞吐量信息
$iostat -d -k 1 10
#查看设备使用率(%util)、响应时间(await)
iostat -d -x -k 1 1
5. 实例分析
$$iostat -d -k 1 |grep sda10
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda10 60.72 18.95 71.53 395637647 1493241908
sda10 299.02 4266.67 129.41 4352 132
sda10 483.84 4589.90 4117.17 4544 4076
sda10 218.00 3360.00 100.00 3360 100
sda10 546.00 8784.00 124.00 8784 124
sda10 827.00 13232.00 136.00 13232 136
上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。
iostat -d -x -k 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1.56 28.31 7.84 31.50 43.65 3.16 21.82 1.58 1.19 0.03 0.80 2.61 10.29
sda 1.98 24.75 419.80 6.93 13465.35 253.47 6732.67 126.73 32.15 2.00 4.70 2.00 85.25
sda 3.06 41.84 444.90 54.08 14204.08 2048.98 7102.04 1024.49 32.57 2.10 4.21 1.85 92.24
可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了。
Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。
6、IOStat信息的获得
使用strace命令能跟踪到答案:
# strace -eopen iostat
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧。大多数Linux发行版本都装备了大量的监控工具。这些工具提供了能用作取得相关信息和系统活动的量度指标。你能使用这些工具发现造成性能问题可能原因。此次讨论到的工具只是分析和调试服务器下面问题时最基本工具中的一部分。
1.找出瓶颈
2.硬盘(存储)瓶颈
3.CPU及内存瓶颈
4.网络瓶颈
# top
top - 10:38:49 up 2:07, 1 user, load average: 0.21, 0.07, 0.06
Tasks: 202 total, 2 running, 200 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7793040k total, 4227764k used, 3565276k free, 98264k buffers
Swap: 10223608k total, 0k used, 10223608k free, 3165244k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4474 oracle 16 0 264m 33m 14m S 0.7 0.4 0:01.92 emagent
26867 root 15 0 12760 1188 828 R 0.3 0.0 0:00.92 top
1 root 15 0 10368 684 572 S 0.0 0.0 0:00.21 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.04 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
#1: top - 进程活动(实时的)
top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。用法: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
-b : 批次模式运行。通常用作来将top的输出的结果传送给其他程式或储存成文件。
-c : 显示执行任务的命令行。
-d : 设定延迟时间
-h : 帮助
-H : 显示线程。当这个设定开启时,将显示所有进程产生的线程。
-i : 显示空闲的进程。
-n : 执行次数。一般与-b搭配使用
-u : 监控指定用户相关进程
-U : 监控指定用户相关进程
-p : 监控指定的进程。当监控多个进程时,进程ID以逗号分隔。这个选项只能在命令行下使用。
-s : 安全模式操作
-S : 累计时间模式
-v : 显示top版本,然后退出。
-M : 自动显示内存单位(k/M/G)
# top
top - 11:26:26 up 2:54, 1 user, load average: 0.04, 0.09, 0.07
Tasks: 207 total, 1 running, 206 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.6%us, 0.6%sy, 0.2%ni, 98.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7793040k total, 4249072k used, 3543968k free, 102040k buffers
Swap: 10223608k total, 0k used, 10223608k free, 3168776k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2291 root 15 0 12756 1072 728 R 2.0 0.0 0:00.01 top
栏位信息
在top中,分别使用26个英文字母对应进程相关信息栏位。可已通过f来添加或移除指定的栏位,通过o来调整对栏位显示顺序。下面我们针对这些栏位进行说明。
a: PID (Process Id):任务的进程ID
b: PPID (Parent Process Pid):父任务的进程ID
c: RUSER (Real User Name):任务的所有者真实名称
d: UID (User Id):任务所有者ID
e: USER (User Name):任务所有者名称
f: GROUP (Group Name):任务所有者群组名
g: TTY (Controlling Tty):终端
h: PR (Priority):优先级
i: NI (Nice value):Nice值
j: P (Last used CPU (SMP)):
k: %CPU (CPU usage):CPU使用率
TIME (CPU Time):CPU时间
TIME+ (CPU Time, hundredths):CPU时间,精确到秒
%MEM (Memory usage (RES)):内存使用率
VIRT (Virtual Image (kb)):虚拟内存。VIRT = SWAP + RES
p: SWAP (Swapped size (kb)):交换空间
q: RES (Resident size (kb)):常驻内存。RES = CODE + DATA
r: CODE (Code size (kb)):
s: DATA (Data+Stack size (kb)):
t: SHR (Shared Mem size (kb)):共享内存。
u: nFLT (Page Fault count):
v: nDRT (Dirty Pages count):
w: S (Process Status):进程状态
分别有以下几种:
D = uninterruptible sleep = 不可被唤醒睡眠
R = running = 正在运行中
S = sleeping = 睡眠状态
T = traced or stopped = 出错或停止状态
Z = zombie = 僵尸状态
x: Command (Command line or Program name):进程名或命令行
y: WCHAN (Sleeping in Function):
z: Flags (Task Flags):
全局
二、命令行启动参数: 用法: top -hv | -bcisSHM -d delay -n iterations [-uuser | -Uuser] -ppid [,pid ...]
在top中,分别使用26个英文字母对应进程相关信息栏位。可已通过f来添加或移除指定的栏位,通过o来调整对栏位显示顺序。下面我们针对这些栏位进行说明。
四、交互命令 1.全局命令
五、练习 1.怎么让top外观显示类似下图? 2.怎样监控httpd进程状况? 3.怎么提高httpd进程运行优先权等级? |
#2:vmstat -系统活动、硬件及系统信息 使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。 #vmstat 3 输出样例: procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0 1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0 0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0 0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0 0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0 0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0 0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0 显示内存使用详细信息 # vmstat -m 显示内存活动/不活动的信息 # vmstat -a 相关链接:How do I find out Linux Resource utilization to detect system bottlenecks? 译者推荐链接:Linux系统管理员必备工具系列之vmstat(原创) #3: w - 显示谁已登录,他们正在做什么? w命令显示系统当前用户及其运行进程的信息。 # w username # w vivek 输出样例: 17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w #4:uptime - 告诉系统已经运行了多久? uptime命令过去只显示系统运行多久。现在,可以显示系统运行多久、当前有多少的用户登录、在过去的1,5,15分钟里平均负载时多少。 # uptime 输入样例: 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00 1可以被认为是最优的负载值。负载是会随着系统不同改变得。单CPU系统1-3和SMP系统6-10都是可能接受的。 Linux系统监控的过程中少不了对主机运行时间和系统负责等信息进行查询,这时候就可以使用Linux uptime命令。uptime命令可以显示系统运行多久、当前有多少的用户登录、在过去的1,5,15分钟里平均负载时多少,其用法十分简单。 AD: linux uptime命令主要用于获取主机运行时间和查询linux系统负载等信息。uptime命令过去只显示系统运行多久。现在,可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。 uptime命令用法十分简单:直接输入 # uptime 即可。 输入样例: 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00 1可以被认为是最优的负载值。负载是会随着系统不同改变得。单CPU系统1-3和SMP系统6-10都是可能接受的。 另外还有一个参数 -V ,是用来查询版本的。 (注意是大写的字母v) [linux @ localhost]$ uptime -V procps version 3.2.7 [linux @ localhost]$ uptime 显示结果为: 10:19:04 up 257 days, 18:56, 12 users, load average: 2.10, 2.10,2.09 显示内容说明: 10:19:04 //系统当前时间 up 257 days, 18:56 //主机已运行时间,时间越大,说明你的机器越稳定。 12 user //用户连接数,是总连接数而不是用户数 load average // 系统平均负载,统计最近1,5,15分钟的系统平均负载 那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数。 如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。 如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。 11 strace strace截取和记录系统进程调用,以及进程收到的信号。是一个非常有效的检测、指导和调试工具。系统管理员可以通过该命令容易地解决程序问题。 使用该命令需要指明进程的ID(PID),例如: strace -p <pid> 图14-11 shows an example of the output of strace. 12 ulimit ulimit内置在bash shell中,用来提供对shell和进程可用资源的控制 使用选项-a列出可以设置的所有参数: ulimit -a -H和-S选项指明所给资源的软硬限制。如果超过了软限制,系统管理员会收到警告信息。硬限制指在用户收到超过文件句炳限制的错误信息之前,可以达到的最大值。 例如可以设置对文件句炳的硬限制:ulimit -Hn 4096 例如可以设置对文件句炳的软限制:ulimit -Sn 1024 查看软硬值,执行如下命令: ulimit -Hn ulimit -Sn 例如限制Oracle用户. 在/etc/security/limits.conf输入以下行: soft nofile 4096 hard nofile 10240 对于Red Hat Enterprise Linux AS,确定文件/etc/pam.d/system-auth包含如下行 session required /lib/security/$ISA/pam_limits.so 对于SUSE LINUX Enterprise Server,确定文件/etc/pam.d/login 和/etc/pam.d/sshd包含如下行: session required pam_limits.so 这一行使这些限制生效。 2.使用说明 例子1:每2秒输出一条结果 字段说明: Procs(进程): r: 运行队列中进程数量 b: 等待IO的进程数量 Memory(内存): swpd: 使用虚拟内存大小 free: 可用内存大小 buff: 用作缓冲的内存大小 cache: 用作缓存的内存大小 Swap: si: 每秒从交换区写到内存的大小 so: 每秒写入交换区的内存大小 IO:(现在的Linux版本块的大小为1024bytes) bi: 每秒读取的块数 bo: 每秒写入的块数 系统: in: 每秒中断数,包括时钟中断。 cs: 每秒上下文切换数。 CPU(以百分比表示): us: 用户进程执行时间(user time) sy: 系统进程执行时间(system time) id: 空闲时间(包括IO等待时间) wa: 等待IO时间 例子2:显示活跃和非活跃内存 使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。 字段说明: Memory(内存): inact: 非活跃内存大小(当使用-a选项时显示) active: 活跃的内存大小(当使用-a选项时显示) 本文来源:http://hi.baidu.com/imlidapeng/blog/item/51872329329ab8335243c1c9.html #5:ps - 显示进程 ps命令显示当前运行进程的快照。使用-A或-e显示所有进程。 # ps -A 输出样例: PID TTY TIME CMD 1 ? 00:00:02 init 2 ? 00:00:02 migration/0 3 ? 00:00:01 ksoftirqd/0 4 ? 00:00:00 watchdog/0 5 ? 00:00:00 migration/1 6 ? 00:00:15 ksoftirqd/1 .... ..... 4881 ? 00:53:28 java 4885 tty1 00:00:00 mingetty 4886 tty2 00:00:00 mingetty 4887 tty3 00:00:00 mingetty 4888 tty4 00:00:00 mingetty 4891 tty5 00:00:00 mingetty 4892 tty6 00:00:00 mingetty 4893 ttyS1 00:00:00 agetty 12853 ? 00:00:00 cifsoplockd 12854 ? 00:00:00 cifsdnotifyd 14231 ? 00:10:34 lighttpd 14232 ? 00:00:00 php-cgi 54981 pts/0 00:00:00 vim 55465 ? 00:00:00 php-cgi 55546 ? 00:00:00 bind9-snmp-stat 55704 pts/1 00:00:00 ps ps与top非常相似,但ps提供更多的信息。 输出长格式 # ps -Al 输出附加全格式(显示进程在执行时传入的参数) # ps -AlF 显示进程结构 # ps -AlFH 在进程后显示线程 # ps -AlLm 打印服务器上所有进程 # ps ax # ps axu 打印进程树 # ps -ejH # ps axjf # pstree 打印安全信息 # ps -eo euser,ruser,suser,fuser,f,comm,label # ps axZ # ps -eM 查看使用Vivek用户名运行的进程 # ps -U vivek -u vivek u 设置自定义输出格式 # ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm # ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm # ps -eopid,tt,user,fname,tmout,f,wchan 只显示Lighttpd的进程ID # ps -C lighttpd -o pid= 或者 # pgrep lighttpd 或者 # pgrep -u vivek php-cgi 显示PID为55977的进程名称 # ps -p 55977 -o comm= 找出消耗内存最多的前10名进程 # ps -auxf | sort -nr -k 4 | head -10 找出使用CPU最多的前10名进程 # ps -auxf | sort -nr -k 3 | head -10 #6:free - 内存使用情况 free命令显示系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。 # free -m # free -m total used free shared buffers cached Mem: 3939 1242 2697 0 69 583 -/+ buffers/cache: 589 3349 Swap: 5951 0 5951 # free total used free shared buffers cached Mem: 4033580 1272560 2761020 0 70844 597056 -/+ buffers/cache: 604660 3428920 Swap: 6094840 0 6094840 # free -k total used free shared buffers cached Mem: 4033580 1273320 2760260 0 70908 597056 -/+ buffers/cache: 605356 3428224 Swap: 6094840 0 6094840 # free -g total used free shared buffers cached Mem: 3 1 2 0 0 0 -/+ buffers/cache: 0 3 Swap: 5 0 5 前段时间有个项目的用C写的,性能测试时发现内存泄露问题。关于怎么观察内存使用问题,free是很好用的一个命令。 bash-3.00$ freetotal used free shared buffers cachedMem: 1572988 1509260 63728 0 62800 277888-/+ buffers/cache: 1168572 404416Swap: 2096472 16628 2079844 Mem:表示物理内存统计-/+ buffers/cached:表示物理内存的缓存统计Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。第1行 Mem: total:表示物理内存总量。used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。free:未被分配的内存。shared:共享内存,一般系统不会用到,这里也不讨论。buffers:系统分配但未被使用的buffers 数量。cached:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。 total = used + free 第2行 -/+ buffers/cached:used:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。 free 2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行buffer 与cache 的区别A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use 第3行: 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached. 接下来解释什么时候内存会被交换,以及按什么方交换。当可用内存少于额定值的时候,就会开会进行交换.如何看额定值(RHEL4.0):#cat /proc/meminfo交换将通过三个途径来减少系统中使用的物理页面的个数:1.减少缓冲与页面cache的大小,2.将系统V类型的内存页面交换出去,3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。事实上,少量地使用swap是不是影响到系统性能的。 下面是buffers与cached的区别。buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.cached是用来给文件做缓冲。那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。#free#man X#free#man X#free你可以先后比较一下free后显示buffers的大小。另一个实验:#free#ls /dev#free你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。 因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)使用free命令将used的值减去 buffer和cache的值就是你当前真实内存使用 ————– 对操作系统来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free只有16936.对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。 所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家 一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于 VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。 前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 记住内存是拿来用的,不是拿来看的.不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换 文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看 内存是否够用的标准哦.———————————————语 法: free [-bkmotV][-s <间隔秒数>] 补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 参 数:-b 以Byte为单位显示内存使用情况。-k 以KB为单位显示内存使用情况。-m 以MB为单位显示内存使用情况。-o 不显示缓冲区调节列。-s<间隔秒数> 持续观察内存使用状况。-t 显示内存总和列。-V 显示版本信息。 用途报告虚拟内存统计信息。语法vmstat [-f ] [ -i ] [ -s ] [ -I ] [ -t ] [ -v ] [ PhysicalVolume ... ] [ Interval [ Count ] ] 描述vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由vmstat命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。 如果调用 vmstat 命令时不带标志,则报告包含系统启动后虚拟内存活动的摘要。如果指定-f 标志,则vmstat 命令报告自从系统启动后派生的数量。PhysicalVolume 参数指定物理卷的名称。 Interval 参数指定每个报告之间的时间量(以秒计)。第一个报告包含系统启动后时间的统计信息。后续报告包含自从前一个报告起的时间间隔过程中所收集的统计信息。如果没有指定Interval 参数,vmstat 命令生成单个报告然后退出。Count 参数只能和Interval 参数一起指定。如果指定了 Count 参数,其值决定生成的报告数目和相互间隔的秒数。如果Interval 参数被指定而没有Count 参数,则连续生成报告。Count 参数不允许为 0。 在 AIX 4.3.3 及更新版本包含有此方法的增强,用于计算 CPU 等待磁盘 I/O 所花时间(wio 时间)的百分比。某些情况下,AIX 4.3.2 以及该操作系统更早的版本中使用的该方法在 SMP 上会给出夸张的 wio 时间报告。 AIX 4.3.2 和更早版本中使用的方法如下:在每个处理器的每一次时钟中断(每个处理器一秒钟 100 次),确定上一个 10 毫秒时间要归入四种类别(usr/sys/wio/idle)中的哪一个。如果在时钟中断的时候,CPU 正忙于 usr 方式,那么 usr 将获取该时钟周期添加到其类别中。如果在时钟中断的时候,CPU 正忙于内核方式,那么 sys 类别获取该时钟周期。如果 CPU 不忙的话,则检测是否有磁盘 I/O 正在进行。如果有任何正在进行的磁盘 I/ O,则累加 wio 类别。如果没有磁盘 I/O 正在进行且 CPU 不忙,则 idle 类别获取该时钟周期。由于所有的空闲 CPU 都被归入 wio 类别,而不管正在等待 I/O 的线程数量,所以会产生夸大的 wio 时间报告。例如,只有一个 I/O 线程的系统可能会报告 90% 以上的 wio 时间,而不管它拥有的 CPU 数量。sar(%wio)、vmstat(wa)和iostat(% iowait)命令报告 wio 时间。 操作系统 AIX 4.3.3 及其更新版本使用的方法如下:如果一个未完成的 I/O 在空闲的 CPU 上启动,则操作系统 AIX 4.3.3 中的更改将只把该 CPU 标记成 wio。当只有少量线程在进行 I/O 而系统其它部分是空闲的,此方法能报告低得多的 wio 时间。例如,一个有四个 CPU 和一个正在进行 I/O 的线程的系统将报告最多 25% 的 wio 时间。有 12 个 CPU 和一个正在进行 I/O 的线程的系统只报告最大为 8% 的 wio 时间。NFS 客户机通过 VMM 读取/写入,biods 在 VMM 中花费的等待 I/O 完成的时间现在报告为 I/O 等待时间。 内核为内核线程、调页和中断活动维护统计信息,vmstat 命令通过使用perfstat 内核扩展来对其进行访问。磁盘输入/输出统计信息由设备驱动程序维护。对于磁盘,利用活动时间和传送信息数量来确定平均传送速率。活动时间的百分数根据报告期间驱动器忙的时间量来计算。 由 vmstat 命令生成的以下报告示例包含栏标题及其描述: kthr:内核线程状态在采样间隔期间每秒钟更改一次。
如果指定一个 -I 标志,I/O 定向视图将会出现以下栏目变化。
标志注:如果在命令行中输入了 -f(或 -s)标志,系统将仅接受-f(或-s)标志,将忽略其它标志。如果同时指定了-f 和-s 标志,系统将仅接受第一个标志,忽略第二个标志。
示例要显示引导后的统计信息摘要,请输入:vmstat 要显示 2 秒时间间隔的 5 个摘要,请输入: vmstat 2 5 第一次摘要包含引导后的时间统计信息。 要显示引导后包括逻辑磁盘 scdisk13 和 scdisk14 的统计信息摘要,请输入: vmstat scdisk13 scdisk14 要显示派生统计信息,请输入: vmstat -f 要显示各事件的计数,请输入: vmstat -s 要显示 vmstat的每一输出栏旁边的时间戳记,请输入: vmstat -t 要以另一套输出栏显示新的 I/O 定向视图,请输入: vmstat -I 要显示所有可用的 VMM 统计信息,请输入: vmstat -vs 文件
相关信息iostat 和vmo命令。 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ] 1. tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 不把网络地址转换成名字; -t 在输出的每一行不打印时间戳; -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定的文件中读取表达式,忽略其它的表达式; -i 指定监听的网络接口; -r 从指定的文件中读取包(这些包一般通过-w选项产生); -w 直接将包写入文件中,并不分析和打印出来; -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程 调用)和snmp(简单 网络管理协议;) 2. tcpdump的表达式介绍 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会 被截获。 在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host, net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是 host. 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src , 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27. 48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则 缺省是src or dst关键字。 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在 FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会 监听所有协议的信息包。 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o r' ,'||'; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来 说明。 (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令 :(在命令行中适用 括号时,一定要 #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) (3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 ,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1 3. tcpdump 的输出结果介绍 下面我们介绍几种典型的tcpdump命令的输出信息 (1) 数据链路层头信息 使用命令#tcpdump --e host ice ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条 命令的输出结果如下所示: 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice. telne t 0:0(0) ack 22535 win 8760 (DF) 分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该 数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它 表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的 目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice. telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760. (2) ARP包的TCPDUMP输出信息 使用命令#tcpdump arp 得到的输出结果是: 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a) 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af :1a) 分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是 ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5 8:af:1a是主机ICE的MAC地址。 (3) TCP包的输出信息 用TCPDUMP捕获的TCP包的一般输出信息是: src > dst: flags data-seqno ack window urgent options src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是 下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项. (4) UDP包的输出信息 用TCPDUMP捕获的UDP包的一般输出信息是: route.port1 > ice.port2: udp lenth UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机 ICE的port2端口,类型是UDP, 包的长度是lenth #8:sar - 搜集和报告系统活动 sar命令用来搜集、报告和储存系统活动信息。查看网路计数器,输入: # sar -n DEV | more 显示最近24小时网络计数器 # sar -n DEV -f /var/log/sa/sa24 | more 你亦可以用sar显示实时情况 # sar 4 5 输出样例: Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009 06:45:12 PM CPU %user %nice %system %iowait %steal %idle 06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78 06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52 06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78 06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22 06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19 Average: all 2.02 0.00 0.27 0.01 0.00 97.70 http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html #9:mpstat - 多处理器使用率 mpstat命令可以显示所有可用处理器的使用情况,处理器编号从0开始。mpstat -P ALL显示每个处理器的平均使用率。 # mpstat -P ALL 输出样例: Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009 06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04 06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31 06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93 06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00 06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80 06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91 06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98 06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75 06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89 相关链接:Linux display each multiple SMP CPU processors utilization individually. #10: pmap - 进程的内存使用 pmap命令可以显示进程的内存映射,使用这个命令可以找出造成内存瓶颈的原因。 # pmap -d PID 显示PID为47394进程的内存信息。 # pmap -d 47394 输出样例: mapped: 933712K writeable/private: 4304K shared: 768000K 最后一行非常重要: * mapped: 933712K 内存映射所占空间大小 * writeable/private: 4304K 私有地址空间大小 * shared: 768000K 共享地址空间大小 相关链接:Linux find the memory used by a program / process using pmap command #11和#12: netstat和ss - 网络相关信息 netstat可以显示网络链接、路由表信息、接口统计信息、伪装链接和多播成员(multicast memberships),ss命令用来显示网络套接字信息,它允许显示类似netstat一样的信息。关于ss和netstat使用,可参考下列资源。 相关链接: ss: Display Linux TCP / UDP Network and Socket Information Get Detailed Information About Particular IP address Connections Using netstat Command #13: iptraf - 网络实时信息 iptraf是一个可交互式的IP网络监控工具。它可以生成多种网络统计信息包括:TCP信息、UDP数量、ICMP和OSPF信息、以太网负载信息、节点状态、IP校验错误等。有下面几种信息格式: 不同网络TCP链接传输量 不同网络接口IP传输量 不同协议网络传输量 不同TCP/UDP端口和不同包大小网络传输量 不同第二层地址网络传输量 图02:一般接口信息:不同网络接口IP传输量 图03:不同网络TCP链接传输量 #14:tcpdump:详细的网络流量分析 tcpdump是一个简单网络流量转储工具,然而要使用好需要对TCP/IP协议非常熟悉。例如要显示关于DNS的网络流量,输入: # tcpdump -i eth1 'udp port 53' 显示所有进出80端口IPv4 HTTP包,也就是只打印包含数据的包。例如:SYN、FIN包和ACK-only包输入: # tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' 显示所有到的FTP会话,输入: # tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20' 显示所有到192.168.1.5的HTTP会话 # tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http' 用wireshark浏览转储文件中的详细信息,输入: #tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80 [align=right][/align] tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ] 1. tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 不把网络地址转换成名字; -t 在输出的每一行不打印时间戳; -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定的文件中读取表达式,忽略其它的表达式; -i 指定监听的网络接口; -r 从指定的文件中读取包(这些包一般通过-w选项产生); -w 直接将包写入文件中,并不分析和打印出来; -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程 调用)和snmp(简单 网络管理协议;) 2. tcpdump的表达式介绍 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会 被截获。 在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host, net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是 host. 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src , 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27. 48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则 缺省是src or dst关键字。 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在 FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会 监听所有协议的信息包。 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o r' ,'||'; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来 说明。 (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令 :(在命令行中适用 括号时,一定要 #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) (3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 ,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1 3. tcpdump 的输出结果介绍 下面我们介绍几种典型的tcpdump命令的输出信息 (1) 数据链路层头信息 使用命令#tcpdump --e host ice ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条 命令的输出结果如下所示: 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 >; ice. telne t 0:0(0) ack 22535 win 8760 (DF) 分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该 数据包,eth0 >;表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它 表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的 目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >; ice. telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760. (2) ARP包的TCPDUMP输出信息 使用命令#tcpdump arp 得到的输出结果是: 22:32:42.802509 eth0 >; arp who-has route tell ice (0:90:27:58:af:1a) 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af :1a) 分析: 22:32:42是时间戳, 802509是ID号, eth0 >;表明从主机发出该数据包, arp表明是 ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5 8:af:1a是主机ICE的MAC地址。 (3) TCP包的输出信息 用TCPDUMP捕获的TCP包的一般输出信息是: src >; dst: flags data-seqno ack window urgent options src >; dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是 下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项. (4) UDP包的输出信息 用TCPDUMP捕获的UDP包的一般输出信息是: route.port1 >; ice.port2: udp lenth UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机 ICE的port2端口,类型是UDP, 包的长度是lenth 第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host. 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。 第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。 普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。 # tcpdump tcpdump: listening on fxp0 11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50 11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43 0000 0000 0080 0000 1007 cf08 0900 0000 0e80 0000 902b 4695 0980 8701 0014 0002 000f 0000 902b 4695 0008 00 11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97 ffff 0060 0004 ffff ffff ffff ffff ffff 0452 ffff ffff 0000 e85b 6d85 4008 0002 0640 4d41 5354 4552 5f57 4542 0000 0000 0000 00 使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用, 使用-c参数指定要监听的数据包数量, 使用-w参数指定将监听到的数据包写入文件中保存 A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用 括号时,一定要 #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1 E 对本机的udp 123 端口进行监视 123 为ntp的服务端口 # tcpdump udp port 123 F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据: #tcpdump -i eth0 src host hostname G 下面的命令可以监视所有送到主机hostname的数据包: #tcpdump -i eth0 dst host hostname H 我们还可以监视通过指定网关的数据包: #tcpdump -i eth0 gateway Gatewayname I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令: #tcpdump -i eth0 host hostname and port 80 ? 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 ,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令 :(在命令行中适用 括号时,一定要 #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o r' ,'||'; 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src , 如果我们只需要列出送到80端口的数据包,用dst port;如果我们只希望看到返回80端口的数据包,用src port。 #tcpdump –i eth0 host hostname and dst port 80 目的端口是80 或者 #tcpdump –i eth0 host hostname and src port 80 源端口是80 一般是提供http的服务的主机 如果条件很多的话 要在条件之前加and 或 or 或 not #tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80 如果在ethernet 使用混杂模式 系统的日志将会记录 May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled. May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。 除了过滤语句,还有一个很重要的参数,也就是说,如果这个参数不设置正确,会导致包数据的丢失! 它就是-s 参数,snaplen, 也就是数据包的截取长度,仔细看man就会明白的!默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失! 只要使用-s 0就可以按包长,截取数据 (一) linux内存查看 free 命令 http://www.wujianrong.com/archives/2007/09/linux_free.html 在Linux下查看内存我们一般用command free [root@nonamelinux ~]# free total used free shared buffers cached Mem: 386024 377116 8908 0 21280 155468 -/+ buffers/cache: 200368 185656 Swap: 393552 0 393552 下面是对这些数值的解释: 第二行(mem): total:总计物理内存的大小。 used:已使用多大。 free:可用有多少。 Shared:多个进程共享的内存总额。 Buffers/cached:磁盘缓存的大小。 第三行(-/+ buffers/cached): used:已使用多大。 free:可用有多少。 第四行就不多解释了。 区别: 第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这 两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached. 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。 所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached. 如上例: 185656=8908+21280+155468 接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换. 如何看额定值(RHEL4.0): #cat /proc/meminfo 交换将通过三个途径来减少系统中使用的物理页面的个数: 1.减少缓冲与页面cache的大小, 2.将系统V类型的内存页面交换出去, 3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。 事实上,少量地使用swap是不是影响到系统性能的。 下面是buffers与cached的区别。 buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages. cached是用来给文件做缓冲。 那就是说:buffers是用来存储,目录里面有什么内容,权限等等。 而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。 实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。 #free #man X #free #man X #free 你可以先后比较一下free后显示buffers的大小。 另一个实验: #free #ls /dev #free 你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。 因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles) 使用free命令 将used的值减去 buffer和cache的值就是你当前真实内存使用 (二),Re:关于 free 命令显示内存使用情况问题 http://linux.chinaunix.net/bbs/thread-887896-1-1.html [root@Linux /tmp]# free total used free shared buffers cached Mem: 4149156 4130412 18744 0 13220 2720160 -/+ buffers/cache: 1397032 2752124 Swap: 6289408 144 6289264第1行 total 内存总数: 4149156 used 已经使用的内存数: 4130412 free 空闲的内存数: 18744 shared 当前已经废弃不用,总是0 buffers Buffer Cache内存数: 13220 cached Page Cache内存数: 2720160 关系:total = used + free 第2行: -/+ buffers/cache的意思相当于: -buffers/cache 的内存数:1397032 (等于第1行的 used - buffers - cached) +buffers/cache 的内存数: 2752124 (等于第1行的 free + buffers + cached) 可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。 第三行单独针对交换分区, 就不用再说了. 为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 如果感兴趣可以进一步参考文件/proc/meminfo,free命令就是根据它的信息生成的。free命令的源码可从procps-xxx-.src.rpm获取,xxx为版本号,比如procps-3.2.3-5.3.src.rpm。 参考内核代码: arch/i386/mm/init.c fs/proc/proc_misc.c include/linux/swap.h mm/filemap.c fs/buffer.c 另外还可以参考O'REILLY的书《Understanding the LINUX KERNEL》。 文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/6_system/linux/Linuxjs/20071027/80138.html tcpdump -i eth0 'tcp port 80' /article/9007525.html |
[root@linux ~]# tcpdump [-nn] [-i 介面] [-w 儲存檔名] [-c 次數] [-Ae] [-qX] [-r 檔案] [所欲擷取的資料內容] 參數: -nn:直接以 IP 及 port number 顯示,而非主機名與服務名稱 -i :後面接要『監聽』的網路介面,例如 eth0, lo, ppp0 等等的介面; -w :如果你要將監聽所得的封包資料儲存下來,用這個參數就對了!後面接檔名 -c :監聽的封包數,如果沒有這個參數, tcpdump 會持續不斷的監聽, 直到使用者輸入 [ctrl]-c 為止。 -A :封包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁封包資料。 -e :使用資料連接層 (OSI 第二層) 的 MAC 封包資料來顯示; -q :僅列出較為簡短的封包資訊,每一行的內容比較精簡 -X :可以列出十六進位 (hex) 以及 ASCII 的封包內容,對於監聽封包內容很有用 -r :從後面接的檔案將封包資料讀出來。那個『檔案』是已經存在的檔案, 並且這個『檔案』是由 -w 所製作出來的。 所欲擷取的資料內容:我們可以專門針對某些通訊協定或者是 IP 來源進行封包擷取, 那就可以簡化輸出的結果,並取得最有用的資訊。常見的表示方法有: 'host foo', 'host 127.0.0.1' :針對單部主機來進行封包擷取 'net 192.168' :針對某個網域來進行封包的擷取; 'src host 127.0.0.1' 'dst net 192.168':同時加上來源(src)或目標(dst)限制 'tcp port 21':還可以針對通訊協定偵測,如 tcp, udp, arp, ether 等 還可以利用 and 與 or 來進行封包資料的整合顯示呢! 範例一:以 IP 與 port number 捉下 eth0 這個網路卡上的封包,持續 3 秒 [root@linux ~]# tcpdump -i eth0 -nn tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win 9648 01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win 9648 <==按下 [ctrl]-c 之後結束 6680 packets captured <==捉下來的封包數量 14250 packets received by filter <==由過濾所得的總封包數量 7512 packets dropped by kernel <==被核心所丟棄的封包 |
我們以範例一當中那個特殊字體行來說明一下:
01:33:40.41:這個是此封包被擷取的時間,『時:分:秒』的單位;
IP:透過的通訊協定是 IP ;
192.168.1.100.22 > :傳送端是 192.168.1.100 這個 IP,而傳送的 port number 為 22,您必須要瞭解的是,那個大於 (>) 的符號指的是封包的傳輸方向喔!
192.168.1.11.1190:接收端的 IP 是 192.168.1.11, 且該主機開啟 port 1190 來接收;
P 116:232(116):這個封包帶有 PUSH 的資料傳輸標誌, 且傳輸的資料為整體資料的 116~232 byte,所以這個封包帶有 116 bytes 的資料量;
ack 1 win 9648:ACK與 Window size 的相關資料。
最簡單的說法,就是該封包是由 192.168.1.100 傳到 192.168.1.11,透過的 port 是由 22 到 1190 , 且帶有 116 bytes 的資料量,使用的是 PUSH 的旗標,而不是 SYN 之類的主動連線標誌。 呵呵!不容易看的懂吧!所以說,上頭才講請務必到 TCP
表頭資料的部分去瞧一瞧的啊!
再來,一個網路狀態很忙的主機上面,你想要取得某部主機對你連線的封包資料而已時, 使用 tcpdump 配合管線命令與正規表示法也可以,不過,畢竟不好捉取! 我們可以透過 tcpdump 的表示法功能,就能夠輕易的將所需要的資料獨立的取出來。 在上面的範例一當中,我們僅針對 eth0 做監聽,所以整個 eth0 介面上面的資料都會被顯示到螢幕上, 不好分析啊!那麼我們可以簡化嗎?例如只取出 port 21 的連線封包,可以這樣做:
[root@linux ~]# tcpdump -i eth0 -nn port 21 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 01:54:37.96 IP 192.168.1.11.1240 > 192.168.1.100.21: . ack 1 win 65535 01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240: P 1:21(20) ack 1 win 5840 01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21: . ack 21 win 65515 01:54:42.79 IP 192.168.1.11.1240 > 192.168.1.100.21: P 1:17(16) ack 21 win 65515 01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: . ack 17 win 5840 01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840 |
我們先在一個終端機視窗輸入『 tcpdump -i lo -nn 』 的監聽,
再另開一個終端機視窗來對本機 (127.0.0.1) 登入『ssh localhost』
那麼輸出的結果會是如何?
[root@linux ~]# tcpdump -i lo -nn 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes 3 11:02:54.253777 IP 127.0.0.1.32936 > 127.0.0.1.22: S 933696132:933696132(0) win 32767 <mss 16396,sackOK,timestamp 236681316 0,nop,wscale 2> 4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936: S 920046702:920046702(0) ack 933696133 win 32767 <mss 16396,sackOK,timestamp 236681316 236681316,nop, wscale 2> 5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192 <nop, nop,timestamp 236681316 236681316> 6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936: P 1:23(22) ack 1 win 8192 <nop,nop,timestamp 236681334 236681316> 7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192 <nop, nop,timestamp 236681334 236681334> |
第 3 行顯示的是『來自 client 端,帶有 SYN 主動連線的封包』,
第 4 行顯示的是『來自 server 端,除了回應 client 端之外(ACK),還帶有 SYN 主動連線的標誌;
第 5 行則顯示 client 端回應 server 確定連線建立 (ACK)
第 6 行以後則開始進入資料傳輸的步驟。
從第 3-5 行的流程來看,熟不熟悉啊?沒錯!那就是 三向交握 的基礎流程啦!夠有趣吧! 不過 tcpdump 之所以被稱為駭客軟體之一可不止上頭介紹的功能吶! 上面介紹的功能可以用來作為我們主機的封包連線與傳輸的流程分析,
這將有助於我們瞭解到封包的運作,同時瞭解到主機的防火牆設定規則是否有需要修訂的地方。
更神奇的使用要來啦!如果我們使用 tcpdump 在 router 上面監聽『明碼』的傳輸資料時, 例如 FTP 傳輸協定,你覺得會發生什麼問題呢? 我們先在主機端下達『 tcpdump -i lo port 21 -nn -X 』然後再以 ftp 登入本機,並輸入帳號與密碼, 結果你就可以發現如下的狀況:
[root@linux ~]# tcpdump -i lo -nn -X 'port 21' 0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@....... 0x0010: 7f00 0001 0015 80ab 8355 2149 835c d825 .........U!I./.% 0x0020: 8018 2000 fe3c 0000 0101 080a 0e2e 0b67 .....<.........g 0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.(vsFTPd. 0x0040: 322e 302e 3129 0d0a 2.0.1).. 0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..A.K@.@.iY.... 0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d ........./.%.U!] 0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7 0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai. 0x0040: 0a . 0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..J.O@.@.iL.... 0x0010: 7f00 0001 80ab 0015 835c d832 8355 217f ........./.2.U!. 0x0020: 8018 2000 fe3e 0000 0101 080a 0e2e 3227 .....>........2' 0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS.mypassw 0x0040: 6f72 6469 7379 6f75 0d0a ordisyou.. |
另外你得瞭解,為了讓網路介面可以讓 tcpdump 監聽,所以執行 tcpdump 時網路介面會啟動在 『錯亂模式 (promiscuous)』,所以你會在 /var/log/messages 裡面看到很多的警告訊息, 通知你說你的網路卡被設定成為錯亂模式!別擔心,那是正常的。 至於更多的應用,請參考 man tcpdump 囉!
例題:如何使用 tcpdump 監聽 (1)來自 eth0 介面卡且 (2)通訊協定為 port 22 ,(3)目標來源為 192.168.1.100 的封包資料? 答: tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.100' |
ethereal
除了 tcpdump 這個軟體之外,其實你還可以使用 ethereal 這個好用的網路流量分析軟體吶! ethereal 分為文字介面與圖形介面,文字介面的用法與 tcpdump 相當的類似,不過他的指令名稱為 tethereal 就是了。因為用法差不多,所以建議您直接使用 man tethereal 查閱吧! 在 CentOS 上原本就有 ethereal 了,所以請拿出光碟來安裝即可喔! 需要安裝 ethereal 與 ethereal-gnome 才行吶!
啟動的方法很簡單,你必須要在 X Window 底下,先開啟一個終端機,然後直接輸入 ethereal 後, 就會出現如下的畫面了:
圖五、ethereal 使用範例圖
簡單的作法,你可以點選如上圖顯示的那個按鈕,會出現挑選監聽的介面視窗,如下所示:
圖六、ethereal 使用範例圖
你應該選擇要監聽的介面,在這裡因為是測試用的,所以鳥哥使用的是 lo 這個內部介面, 你當然應該要選擇你自己的網路介面才是。然後按下 start 後,就會出現開始偵測的畫面了:
圖七、ethereal 使用範例圖
在這個畫面當中你可以看到很多類型的封包協定,在等你處理完畢後,就可以按下『stop』結束監聽, 而開始進入如下的封包分析畫面。
圖八、ethereal 使用範例圖
封包分析畫面共分為三大區塊,如上圖所示,第一區塊主要顯示的是封包的標頭資料, 內容就有點類似 tcpdump 的顯示結果,第二區塊則是詳細的表頭資料, 包括訊框的內容、通訊協定的內容以及 socket pair 等等資訊。 第三區塊則是 16 進位與 ASCII 碼的顯示結果。透過這個 ethereal 您就可以一口氣得到所需要的所有封包內容啦! 而且還是圖形介面的,很方便吧!透過在第一區塊選擇不同的封包,就能夠查閱每個封包的資料內容囉!
nc,
netcat
這個 nc 可以用來作為某些服務的檢測,因為他可以連接到某個 port 來進行溝通, 此外,還可以自行啟動一個 port 來傾聽其他用戶的連線吶!非常的不錯用! 如果在編譯的時候給予『GAPING_SECURITY_HOLE』參數的話,嘿嘿! 這個軟體還可以用來取得用戶端的 bash 哩!可怕吧!我們的 CentOS 比較人性化,並沒有給予上面的參數,所以我們不能夠用來作為駭客軟體~ 但是用來取代 telnet 也是個很棒的功能了!(有的系統將執行檔改名為 netcat
啦!)
[root@linux ~]# nc [IP|host] [port] [root@linux ~]# nc -l -p [port] 參數: -l :作為監聽之用,亦即開啟一個 port 來監聽用戶的連線; -p :開啟的這個 port number 範例一:連接本地端的 port 25 查閱相關訊息 [root@linux ~]# nc localhost 25 localhost.localdomain [127.0.0.1] 25 (smtp) open 220 pc.dm.tsai ESMTP Postfix ehlo localhost 250-pc.dm.tsai 250-PIPELINING 250-SIZE 40000000 250-ETRN quit 221 Bye |
範例二:啟動一個 port 來監聽使用者的連線要求 [root@linux ~]# nc -l -p 20000 # 啟動一個 port 20000 在主機上,如果此時使用 netstat -tlnp # 就可以看到系統上多出來一個 port 20000 在傾聽使用者的連線喔! |
[root@linux ~]# nc localhost 20000 <==這裡可以開始輸入字串了! |
#15:strace - 系统调用
追踪系统调用和型号,这对于调试Web服务器和其他服务器非常有用。了解怎样追踪进程和他功能。
#16:/proc文件系统 - 各种内核信息
/proc目录下文件提供了很多不同硬件设备和内核的详细信息。更多详情参见Linux kernel /proc。一般/proc例如:
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts
#17:Nagios - 服务器及网络监控
Nagios 是一款非常流行的系统及网络监控软件。你可以轻松监控所有的主机、网络设备及服务。它能在发生故障和重新恢复后发送警讯。FAN是"Fully Automated Nagios"的缩写。FAN的目标就是由Nagios社群提供Nagios的安装。为了使安装Nagios服务器更加容易,FAN提供一个标准ISO格式的光盘镜像。此发行版中还会包含一组增强用户使用体验的工具。
#18:Cacti - 基于Web的监控工具
Cacti是一套完成的网络图形化解决方案,基于RRDTool的资料存储和图形化功能。Cacti提供一个快速的轮询器、进阶的图形化模板、多种数据采集方法和用户管理功能。这些功能都拥有非常友好易用的界面,确保可以部署在一个包含数百台设备的复杂网络中。它提供关于网络、CPU、内存、已登录用户、Apache、DNS等信息。关于怎样在CentOS / RHEL安装配置Cacti,详见:http://www.cyberciti.biz/faq/fedora-rhel-install-cacti-monitoring-rrd-software/
#19:KDE System Guard
KSysguard是在KDE桌面下一个网络化的系统监控工具。这个工具可以通过SSH会话运行。它提供很多功能,例如可以监控本机和远程主机的客户端/服务器架构,前端图形界面使用所谓传感器得到信息并展现出来。传感器返回的可以是一个简单的数值或是一组表格的信息。针对不同的信息类型,提供一个或多个显示。这些显示被组织多个工作表中,可以工作表可以独体储存和加载。所以,KSysguard不只是一个简单的任务管理器,还是一个可以控制多台服务器的强大工具。
图05:KDE System Guard
详细用法参见: the
KSysguard handbook
#20:Gnome System Monitor
System Monitor可以显示系统基本信息、监控系统进程、系统资源及文件系统使用率。你也可以使用System
Monitor监控和修改系统行为。尽管没有KDE System Guard功能强大,但其提供的基本信息对于入门用户还是非常有用的。
* 显示关于计算机硬件和软件的各种基本信息。
* Linux内核版本
* GNOME版本
* 硬件
* 安装的内存
* 处理器及其速度
* 系统状态
* 当前可用的硬盘空间
* 进程
* 内存及交换空间
* 网络使用率
* 文件系统
* 所有挂载的文件系统及其基本信息
图06:The Gnome System Monitor application
1.htop—— http://htop.sourceforge.net/
一个可以让用户与之交互的进程查看器。作为文本模式的应用程序,主要用于控制台或 X 终端中。当前具有按树状方式来查看进程,支持颜色主题,可以定制等特性。
2.dstat —— http://dag.wieers.com/home-made/dstat/
一个用来替换vmstat, iostat, netstat, nfsstat 和ifstat 这些命令的工具,是一个全能系统信息统计工具。
3.BMon——http://freshmeat.net/projects/bmon/
一个易于使用的软件,该软件可以帮助您监测蓝牙设备。
4.Iftop——http://www.ex-parrot.com/pdw/iftop/
主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同那台机器间的流量大小,非常适合于代理服务器和iptables服务器使用
5.ifstat——http://gael.roualland.free.fr/ifstat/
一个非常不错的检测网络活动状态的软件
6.Sysstat——http://pagesperso-orange.fr/sebastien.godard/
包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。
小技巧:你知道iostat是从哪里得到IO相关信息的吗?使用strace命令能跟踪到答案:
shell> strace -eopen iostat open("/proc/diskstats", O_RDONLY)
注:Strace教程:5 simple ways to troubleshoot using Strace
注:关于diskstats的说明,参见官方文档(主要是其中的field1 ~ field11部分)。
如果你的操作系统里没有iostat命令的话,除了从源代码安装,还可以使用下面方式:
Centos/Fedora的安装方式是:yum install sysstat
Debian/Ubuntu的安装方式是:aptitude install sysstat
我最常用的iostat命令格式是:『iostat -dx 1』,意思是每隔一秒显示一次IO扩展信息。
shell> iostat -dx 1 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s sda 0.18 37.71 0.65 2.63 50.18 322.08 avgrq-sz avgqu-sz await svctm %util 113.46 0.35 107.49 1.67 0.55 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s sda 0.00 4208.00 0.00 165.00 0.00 163872.00 avgrq-sz avgqu-sz await svctm %util 993.16 119.54 1144.36 6.07 100.10
注:开头显示的是自系统启动开始的平均值,后面显示的是每段时间间隔里的平均值。
介绍一下相关参数的含义:
rrqm/s:队列中每秒钟合并的读请求数量
wrqm/s:队列中每秒钟合并的写请求数量
r/s:每秒钟完成的读请求数量
w/s:每秒钟完成的写请求数量
rsec/s:每秒钟读取的扇区数量
wsec/s:每秒钟写入的扇区数量
avgrq-sz:平均请求扇区的大小
avgqu-sz:平均请求队列的长度
await:平均每次请求的等待时间
svctm:平均每次请求的服务时间
util:设备的利用率
注:建议对照源代码来记忆这些参数都是如何计算出来的。
关于这些参数,相对重要的是后面几个,具体来说是:util,svctm,await,avgqu-sz:
util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对)。有时候会出现大于100%的情况,这是因为读取数据的时候是非原子操作。
svctm是平均每次请求的服务时间。从源代码里可以看出:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。
await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好。
说明:svctm参数在未来某个版本的iostat会被删除,官方文档是这样描述原因的:
The average service time (svctm field) value is meaningless, as I/O statistics are calculated at block level, and we don’t know when the disk driver starts to process a request. For this reason, this field will be removed in a future sysstat version.
另外,有时候iostat会显示一些很离谱的结果,官方FAQ给出了如下的解释:
Because of a Linux kernel bug, iostat -x may display huge I/O response times (svctm) and a bandwidth utilization (%util) of 100% for some devices. Indeed these devices have a value for the field #9 (beginning after the device name) in /proc/{partitions,diskstats}
which is always different from 0, and even negative sometimes. Yet this field should go to zero, since it gives the number of I/Os currently in progress (it is incremented as requests are submitted, and decremented as they finish). To (temporarily) solve the
problem, you should reboot your system to reset the counters in /proc/{partitions,diskstats}.
如果大家想要更系统的了解关于IO的相关知识,可以参考如下资料:
Getting the hang of IOPS
Basic I/O Monitoring on Linux
http://www.orczhou.com/index.php/2010/03/iostat-detail/
top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。 |
方法一:
直接查看 /proc/meminfo 文件
[root@yunwei2 ~]# cat /proc/meminfo
MemTotal: 4033580 kB
MemFree: 2261836 kB
Buffers: 198080 kB
Cached: 1129164 kB
SwapCached: 0 kB
Active: 683092 kB
Inactive: 930404 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 4033580 kB
LowFree: 2261836 kB
SwapTotal: 6094840 kB
SwapFree: 6094840 kB
Dirty: 40 kB
Writeback: 0 kB
AnonPages: 286196 kB
Mapped: 33416 kB
Slab: 118932 kB
PageTables: 8676 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 8111628 kB
Committed_AS: 525248 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 266040 kB
VmallocChunk: 34359472139 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
方法二:
使用 free -m 命令查看,如下:
free -m
total used free shared buffers cached
Mem: 3939 1725 2213 0 189 1102
-/+ buffers/cache: 433 3505
Swap: 5951 0 5951
total 内存总数:M
used 已经使用的内存数: M
free 空闲的内存数:M
shared 当前已经废弃不用的内存数,总是M
-buffers/cache反映的是被程序实实在在用掉的内存
buffers/cache反映的是可以使用用的内存总数,这里只剩余 M
方法三:
使用 top 命令也可以看到实时的内存使用情况。
2、
如何查看CPU类型以及相关特性?
方法一:
Linux下CPU相关的参数保存在 /proc/cpuinfo 文件里,
查看文件内容,即可知道CPU相关的技术参数。
方法二:
采用命令 dmesg | grep CPU 可以查看到相关CPU的启动信息
查看CPU的位数可以这样 getconf LONG_BIT,不是32位就是64位了:)
linux查看cpu个数命令
cat /proc/cpuinfo 我记得里面有
LINUX下查看CPU负载的所有命令
$
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2260164 198756 1129164 0 0 2 1 4 21 0 0 100 0 0
procs 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态us 列显示了用户方式下所花费 CPU 时间的百分比。
us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。
这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 id 列显示了cpu处在空闲状态的时间百分比 system 显示采集间隔内发生的中断数in 列表示在某一时间间隔中观测到的每秒设备中断数。cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。memoryswpd
切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常 free 当前的空闲页面列表中内存数量(k表示) buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。 cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。 swapsi 由内存进入内存交换区数量。so由内存交换区进入内存数量。
IObi 从块设备读入数据的总量(读磁盘)(每秒kb)。bo 块设备写入数据的总量(写磁盘)(每秒kb)这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
1、如何查看CPU类型以及相关特性?
方法一:
Linux下CPU相关的参数保存在 /proc/cpuinfo 文件里,
查看文件内容,即可知道CPU相关的技术参数。
方法二:
采用命令 dmesg | grep CPU 可以查看到相关CPU的启动信息
查看CPU的位数可以这样 getconf LONG_BIT,不是32位就是64位了:)
2、如何查看内存大小以及使用情况?
方法一:
直接查看 /proc/meminfo 文件
方法二:
使用 free -m 命令查看,如下:
[root@miix proc]# free -m
total used free shared buffers cached
Mem: 748 738 9 0 121 304
-/+ buffers/cache: 313 435
Swap: 768 0 768
可以看到总内存为748M,使用了738M,空闲9M,交换空间768M还没使用。
其实我的物理内存是768M的,一些内存和显卡共享了。
方法三:
使用 top 命令也可以看到实时的内存使用情况。
3、如何查看硬盘型号以及相关参数?
方法一:
fdisk -l 可以看到系统上的磁盘(包括U盘)的分区以及大小相关信息。
方法二:
直接查看 /proc/partitions 文件。
方法三:
通过命令 hdparm -i /dev/hda 获取硬盘详细物理参数
4、如何查看网卡相关信息?
方法一:
ethtool eth0 采用此命令可以查看到网卡相关的技术指标
(本人测试过不一定所有网卡都支持此命令)
ethtool -i eth1 加上 -i 参数查看网卡驱动
可以尝试其它参数查看网卡相关技术参数
方法二:
也可以通过 dmesg | grep eth0 等看到网卡名字(厂家)等信息
通过查看 /etc/sysconfig/network-.s/ifcfg-eth0
可以看到当前的网卡配置包括IP、网关地址等信息。
当然也可以通过ifconfig命令查看。
5、如何查看USB设备相关信息?
方法一:
其实通过 fdisk -l 命令可以查看到接入的U盘信息,本人的U盘信息如下:
Disk /dev/sda: 2012 MB, 2012217344 bytes
16 heads, 32 sectors/track, 7676 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
Device BootStartEndBlocksId System
/dev/sda1* 16 7676 1961024 b W95 FAT32
U盘的设备文件是 /dev/sda,2G大小,FAT32格式。
如果用户登陆的不是Linux图形界面,U盘不会自动挂载上来。
此时可以通过手工挂载(mount):
mount /dev/sda1 mount_point
以上命令将U盘挂载到当前目录的 mount_point 目录,注意挂的是 sda1 不是 sda。
卸载命令是 umount mount_point
Linux默认没有自带支持NTFS格式磁盘的驱动,但对FAT32支持良好,挂载的时候一般不需要 -t vfat 参数 。
如果支持ntfs,对ntfs格式的磁盘分区应使用 -t ntfs 参数。
如果出现乱码情况,可以考虑用 -o iocharset=字符集 参数。
可以通过 lsusb 命令查看 USB 设备信息哦:
[root@miix tmp]# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 002: ID 0951:1613 Kingston Technology
Bus 004 Device 001: ID 0000:0000
6、如何查看光盘相关信息?
方法一:
插入CD光碟后,在本人的RHEL5系统里,光碟文件是 /dev/cdrom,
因此只需 mount /dev/cdrom mount_point 即可。
[root@miix tmp]# mount /dev/cdrom mount_point
mount: block device /dev/cdrom is write-protected, mounting read-only
其实仔细看一下,光驱的设备文件是 hdc
[root@miix tmp]# ls -l /dev/cdrom*
lrwxrwxrwx 1 root root 3 01-08 08:54 /dev/cdrom -> hdc
lrwxrwxrwx 1 root root 3 01-08 08:54 /dev/cdrom-hdc -> hdc
因此我们也可以这样 mount /dev/hdc mount_point
如果光驱里没放入有效光盘,则报错:
[root@miix tmp]# mount /dev/hdc mount_point
mount: 找不到介质
7、如何挂载ISO文件?
方法:
mount -o loop *.iso mount_point
8、如何查看主板信息?
使用命令 lspci 即可
http://os.51cto.com/art/201003/187660.htm
测试机器的硬件信息:
查看CPU信息(型号)
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)
# cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(说明实际上是两颗4核的CPU)
# getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
8
(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)
再完整看cpu详细信息, 不过大部分我们都不关心而已.
# dmidecode | grep 'Processor Information'
查看内 存信息
# cat /proc/meminfo
# uname -a
Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)
# cat /etc/issue | grep Linux
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
(查看当前操作系统发行版信息)
查看机器型号
# dmidecode | grep "Product Name"
查看网卡信息
# dmesg | grep -i eth
我们通过Linux查看内存free命令查看机器空闲内存时,会发现free的值很小。下面我们就来了解学习下Linux查看内存的命令和对这些命令的解释,这样大家更能够深刻理解我们的Linux查看内存命令
在Linux下查看内存我们一般用free命令:
[root@scs-2 tmp]# free
total used free shared buffers cached
Mem: 3266180 3250004 16176 0 110652 2668236
-/+ buffers/cache: 471116 2795064
Swap: 2048276 80160 1968116
下面是对Linux查看内存命令中这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
Linux查看内存命令时如何看额定值:
cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfo
MemTotal: 3266180 kB
MemFree: 17456 kB
Buffers: 111328 kB
Cached: 2664024 kB
SwapCached: 0 kB
Active: 467236 kB
Inactive: 2644928 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 3266180 kB
LowFree: 17456 kB
SwapTotal: 2048276 kB
SwapFree: 1968116 kB
Dirty: 8 kB
Writeback: 0 kB
Mapped: 345360 kB
Slab: 112344 kB
Committed_AS: 535292 kB
PageTables: 2340 kB
VmallocTotal: 536870911 kB
VmallocUsed: 272696 kB
VmallocChunk: 536598175 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
用free -m查看的结果:
[root@scs-2 tmp]# free -m
total used free shared buffers cached
Mem: 3189 3173 16 0 107 2605
-/+ buffers/cache: 460 2729
Swap: 2000 78 1921
查看/proc/kcore文件的大小(内存镜像):
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
备注:
占用内存的测量
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
Linux查看内存命令的输出解释
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 \
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 04
查看机器可用内存
/proc/28248/>free
total used free shared buffers cached
Mem: 1023788 926400 97388 0 134668 503688
-/+ buffers/cache: 288044 735744
Swap: 1959920 89608 1870312
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
查看内存
所以 空闲内存=free+buffers+cached=total-used
显示每个插槽,及插槽中内存的信息
/usr/sbin/dmidecode | grep -A 16 "Memory Device"
查看简要内存信息
/usr/sbin/dmidecode | grep -A 16 "Memory Device" | grep -E "Size|Locator" | grep -v Bank
查看cpu
显示每个cpu的详细信息
/usr/sbin/dmidecode | grep -A55 'Processor Information'
显示cpu简要信息
/usr/sbin/dmidecode | grep -A55 'Processor Information' | grep -E "Socket|Version" 查看扩展卡
/usr/sbin/dmidecode | grep -A3 "On Board Device"
查看网卡速率
dmesg | grep ^eth
linux 查看网卡速度调整工作模式
相关搜索: WordLinux man iostat
How Linux iostat computes its results
Linux iostat
http://blog.chinaunix.net/u3/93062/showart_1934431.html
原文:http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
翻译:飞哥 (http://hi.baidu.com/imlidapeng)
相关文章推荐
- centos 下安装监控工具 sar,iostat
- centos 下安装监控工具 sar,iostat
- Centos Linux用sysstat包安装iostat,mpstat,sar等命令
- Linux 安装性能监控检测工具sysstat
- Linux-Centos 安装mono与monodevelop跨平台开发工具
- 性能测试监控 Linux- Nmon工具的安装与使用
- Linux CentOS 安装Python的easy_install工具
- 简单Linux系统监控小工具linux-dash安装与体验
- Linux统计/监控工具SAR详细介绍
- linux(centos)下编译安装php性能测试工具xhprof笔记
- CentOS 5.5 下开源的系统监控工具 cacti 的安装
- CentOS下安装使用流量监控工具-iftop
- CentOS Linux 监控安装之Zabbix
- centos6.5中安装htop进程管理监控工具
- centos/linux下网卡流量监测工具 iftop 安装及使用教程
- centos/linux下网卡流量监测工具 iftop 安装及使用教程
- 在Ubuntu 14.10上安装基于Web的监控工具:Linux-Dash
- CentOS [缺陷库管理工具JIRA]最新Linux版本jira6.3.6安装汉化破解以及数据迁移
- linux下网络监控工具:cacti的安装与配置
- RHEL 5.4 下安装和使用 ntop 全纪录(ntop:Linux下可通过Web访问的网络流量监控工具)