《Oracle DBA的UNIX 袖珍参考手册》笔记10
作者:nero 日期:2009-08-24
这一章节主要讲的是linux下的内存和CPU管理,非常简单的几个命令~
书上说的这个dmesg也很有用,用来查看启动信息~
[root@nero ~]# dmesg|grep "eth0"
divert: allocating divert_blk for eth0
eth0: registered as PCnet/PCI II 79C970A
eth0: no IPv6 routers present
[root@nero ~]#
free命令用来显示内存的使用情况。
语法结构:
free [-b|-k|-m] [-o] [-s delay] [-t] [-V]
参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
#free -b -s3
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每3秒更新一次。
[root@nero ~]# free
total used free shared buffers cached
Mem: 1034496 465048 569448 0 13688 368512
-/+ buffers/cache: 82848 951648
Swap: 1044216 0 1044216
显示分配的内存段
[root@nero ~]# ipcs - pmb
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 32768 gdm 600 393216 2 dest
0x734145b8 65537 oracle 640 287309824 16
------ Semaphore Arrays --------
key semid owner perms nsems
0x5f178298 98304 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[root@nero ~]#
-P 写入与共享内存标识有关的 SID(段标识)列表,以及保留在那个段中的字节数。
-m 写入一些关于活动共享内存段的信息。
-b 写入消息队列的队列上消息的最大字节数、共享内存段的大小、每个信号量集中信号量的数量。
说实话,我也看的不是很明白~
手动移除内存段分配
有的情况下内存实例崩溃,但是 oracle 的内存段却没释放。可以使用ipcrm 来手动完成这个工作。
上句释放标识符为memid的共享内存,如果我们要释放所有的共享内存,只需要取出所有共享内存的ID,然后挨个ipcrm就行了,下面的程序正表达了此种方法的具体行为,经过我的测试,可以成功共释放共享内存:
#########shut.sh#########
#desp: scripts for releasing share memories
ipcs -m | awk '{if($2~/^[0-9]+$/)print $2}' > out
cat out | while read shid
do
ipcrm shm $shid
done
rm -fr out
要释放共享内存,只需要执行 sh shut.sh就行了
这里需要解释一下,如果第二个字段匹配^[0-9]+$/这个正则的话,那就打印第二个字段
^[0-9]+$/表示一串数字
[root@nero ~]# ipcs -m | awk '{if($2~/^[0-9]+$/)print $2}'
32768
65537
使用top命令来显示Unix 服务器的高CPU 资源占用会话。top显示每个CPU 的使用情况。top 的输出分两部分。第一部分显示每个处理器的负载情况,第二部分显示使用CPU最多的会话信息。
[root@nero ~]# top
top - 21:31:34 up 3:19, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7% us, 2.0% sy, 0.0% ni, 97.0% id, 0.3% wa, 0.0% hi, 0.0% si
Mem: 1034496k total, 574304k used, 460192k free, 27724k buffers
Swap: 1044216k total, 0k used, 1044216k free, 451976k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6391 root 15 0 140m 8388 2480 S 0.7 0.8 0:34.65 X
6671 oracle 16 0 7660 1532 1076 S 0.7 0.1 0:00.96 sshd
634 root 16 0 3304 976 768 R 0.3 0.1 0:00.10 top
1 root 16 0 2936 552 472 S 0.0 0.1 0:00.82 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
作为一个DBA 应该关心的内容有:
Load averages:平均负载。如果大于 1说明服务器负荷过重。
CPU states:CPU 信息概要。0.7% user 的意思是CPU 有 0.7%是用户占用,其他可按字面类推。
Memory:Free 表明可用的内存数量。本例子中可用内存是 27724k。
IDLE:CPU空闲百分比
使用 sar
sar在 SVR4(是一个linux标准) 环境中,例如 HP-UX、Solaris 中很普及,在aix 中也可以用。Sar命令可以查看整体CPU 消耗情况,磁盘、内存、JFS buffer 使用情况等。常见的 sar使用
例子:
显示CPU 活动情况。
[root@nero oracle]# sar -u
Linux 2.6.9-78.ELsmp (nero) 2009年08月23日
21时50分01秒 CPU %user %nice %system %iowait %idle
22时00分01秒 all 3.00 0.33 4.30 0.13 92.24
Average: all 3.00 0.33 4.30 0.13 92.24
使用vmstat
vmstat 是通用的UNIX 监控工具,vmstat 在 IRIX操作系统中是 osview。vmstat的第一个参数是间隔的秒数,也可以带第二个参数,表明显示多少次。
输出中一些重要的信息:
r
运行队列。当这个值超过CPU数量的时候,服务器就有CPU瓶颈(可以通
过lsdev -C|grep Process|wc -l 来获取CPU数量)
pi
page-in数量。这个参数非0暗示着系统缺少内存,内存被交换到磁盘。然而
当程序刚使用的时候也可能导致page-in非0。为了找到真正原因,则检查sr
列。如果sr也是非0,那么的确意味着缺少内存。
sr
扫描速率。如果扫描速率持续增加,那么页交换后台程序忙于分配内存页。
[root@nero oracle]# vmstat 3 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 347800 43064 486036 0 0 28 29 1014 80 1 4 94 1
1 1 0 347736 43068 486032 0 0 0 29 1009 174 2 3 95 0
[root@nero oracle]#
下面是CPU的一些信息:
us
用户占用CPU的百分比
sy
系统占用CPU的百分比
id
空闲CPU百分比
wa
等待CPU的百分比
用户和系统百分比之和(us+sy)接近 100 时,说明CPU 繁忙,但并不意味着 CPU 过载。sr 超过CPU 数量的时候意味着CPU 过载。当CPU 等待(wa)超过20 的时候,那么20%或者更多的处理时间在等待资源,通常是I/O。通常在备份或者导出等I/O 操作的时候这个百分比比较大;但如果正常的时候这个值一直挺高则也可能有I/O 瓶颈。
显示服务器平均负载情况(w命令)。
Unix 的w 命令用来显示高资源会话简单的信息。大多数的有经验的Oracle DBA 都会首先用这个命令来快速查看一下服务器负载情况,因为w 命令在几乎所有的Unix 下都可以用。
[root@nero oracle]# w
22:10:19 up 3:57, 2 users, load average: 0.10, 0.12, 0.09
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
oracle pts/1 192.168.0.1 18:19 0.00s 0.72s 0.14s sshd: oracle [p
oracle :0 - 21:47 ?xdm? 3:55 1.10s /usr/bin/gnome-
上面的输出中的 load average 分别是过去 1分钟、5分钟、15分钟的负载情况。如果大于 1说明CPU 紧张。
使用 iostat
iostat显示物理磁盘 I/O情况。下面的 3表明3秒钟显示一次。
[root@nero oracle]# iostat 3
Linux 2.6.9-78.ELsmp (nero) 2009年08月23日
avg-cpu: %user %nice %sys %iowait %idle
0.67 0.43 4.00 0.69 94.20
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 3.77 54.13 57.02 784694 826496
sda1 3.76 54.00 57.02 782802 826496
sda2 0.00 0.06 0.00 908 0
avg-cpu: %user %nice %sys %iowait %idle
2.01 0.33 3.34 0.00 94.31
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 3.01 0.00 74.92 0 224
sda1 3.01 0.00 74.92 0 224
sda2 0.00 0.00 0.00 0 0
上面比较重要的列:
Kb_read:过去的时间区间内读取得K 字节数。(第一个显示的是历史总计,因此要看变
化情况,应该看其它的时间区间。)
Kb_wrtn: 过去的时间区间内写入得 K 字节数。
汗,记住就行~
书上说的这个dmesg也很有用,用来查看启动信息~
[root@nero ~]# dmesg|grep "eth0"
divert: allocating divert_blk for eth0
eth0: registered as PCnet/PCI II 79C970A
eth0: no IPv6 routers present
[root@nero ~]#
free命令用来显示内存的使用情况。
语法结构:
free [-b|-k|-m] [-o] [-s delay] [-t] [-V]
参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
#free -b -s3
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每3秒更新一次。
[root@nero ~]# free
total used free shared buffers cached
Mem: 1034496 465048 569448 0 13688 368512
-/+ buffers/cache: 82848 951648
Swap: 1044216 0 1044216
显示分配的内存段
[root@nero ~]# ipcs - pmb
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 32768 gdm 600 393216 2 dest
0x734145b8 65537 oracle 640 287309824 16
------ Semaphore Arrays --------
key semid owner perms nsems
0x5f178298 98304 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
[root@nero ~]#
-P 写入与共享内存标识有关的 SID(段标识)列表,以及保留在那个段中的字节数。
-m 写入一些关于活动共享内存段的信息。
-b 写入消息队列的队列上消息的最大字节数、共享内存段的大小、每个信号量集中信号量的数量。
说实话,我也看的不是很明白~
手动移除内存段分配
有的情况下内存实例崩溃,但是 oracle 的内存段却没释放。可以使用ipcrm 来手动完成这个工作。
上句释放标识符为memid的共享内存,如果我们要释放所有的共享内存,只需要取出所有共享内存的ID,然后挨个ipcrm就行了,下面的程序正表达了此种方法的具体行为,经过我的测试,可以成功共释放共享内存:
#########shut.sh#########
#desp: scripts for releasing share memories
ipcs -m | awk '{if($2~/^[0-9]+$/)print $2}' > out
cat out | while read shid
do
ipcrm shm $shid
done
rm -fr out
要释放共享内存,只需要执行 sh shut.sh就行了
这里需要解释一下,如果第二个字段匹配^[0-9]+$/这个正则的话,那就打印第二个字段
^[0-9]+$/表示一串数字
[root@nero ~]# ipcs -m | awk '{if($2~/^[0-9]+$/)print $2}'
32768
65537
使用top命令来显示Unix 服务器的高CPU 资源占用会话。top显示每个CPU 的使用情况。top 的输出分两部分。第一部分显示每个处理器的负载情况,第二部分显示使用CPU最多的会话信息。
[root@nero ~]# top
top - 21:31:34 up 3:19, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7% us, 2.0% sy, 0.0% ni, 97.0% id, 0.3% wa, 0.0% hi, 0.0% si
Mem: 1034496k total, 574304k used, 460192k free, 27724k buffers
Swap: 1044216k total, 0k used, 1044216k free, 451976k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6391 root 15 0 140m 8388 2480 S 0.7 0.8 0:34.65 X
6671 oracle 16 0 7660 1532 1076 S 0.7 0.1 0:00.96 sshd
634 root 16 0 3304 976 768 R 0.3 0.1 0:00.10 top
1 root 16 0 2936 552 472 S 0.0 0.1 0:00.82 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
作为一个DBA 应该关心的内容有:
Load averages:平均负载。如果大于 1说明服务器负荷过重。
CPU states:CPU 信息概要。0.7% user 的意思是CPU 有 0.7%是用户占用,其他可按字面类推。
Memory:Free 表明可用的内存数量。本例子中可用内存是 27724k。
IDLE:CPU空闲百分比
使用 sar
sar在 SVR4(是一个linux标准) 环境中,例如 HP-UX、Solaris 中很普及,在aix 中也可以用。Sar命令可以查看整体CPU 消耗情况,磁盘、内存、JFS buffer 使用情况等。常见的 sar使用
例子:
显示CPU 活动情况。
[root@nero oracle]# sar -u
Linux 2.6.9-78.ELsmp (nero) 2009年08月23日
21时50分01秒 CPU %user %nice %system %iowait %idle
22时00分01秒 all 3.00 0.33 4.30 0.13 92.24
Average: all 3.00 0.33 4.30 0.13 92.24
使用vmstat
vmstat 是通用的UNIX 监控工具,vmstat 在 IRIX操作系统中是 osview。vmstat的第一个参数是间隔的秒数,也可以带第二个参数,表明显示多少次。
输出中一些重要的信息:
r
运行队列。当这个值超过CPU数量的时候,服务器就有CPU瓶颈(可以通
过lsdev -C|grep Process|wc -l 来获取CPU数量)
pi
page-in数量。这个参数非0暗示着系统缺少内存,内存被交换到磁盘。然而
当程序刚使用的时候也可能导致page-in非0。为了找到真正原因,则检查sr
列。如果sr也是非0,那么的确意味着缺少内存。
sr
扫描速率。如果扫描速率持续增加,那么页交换后台程序忙于分配内存页。
[root@nero oracle]# vmstat 3 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 347800 43064 486036 0 0 28 29 1014 80 1 4 94 1
1 1 0 347736 43068 486032 0 0 0 29 1009 174 2 3 95 0
[root@nero oracle]#
下面是CPU的一些信息:
us
用户占用CPU的百分比
sy
系统占用CPU的百分比
id
空闲CPU百分比
wa
等待CPU的百分比
用户和系统百分比之和(us+sy)接近 100 时,说明CPU 繁忙,但并不意味着 CPU 过载。sr 超过CPU 数量的时候意味着CPU 过载。当CPU 等待(wa)超过20 的时候,那么20%或者更多的处理时间在等待资源,通常是I/O。通常在备份或者导出等I/O 操作的时候这个百分比比较大;但如果正常的时候这个值一直挺高则也可能有I/O 瓶颈。
显示服务器平均负载情况(w命令)。
Unix 的w 命令用来显示高资源会话简单的信息。大多数的有经验的Oracle DBA 都会首先用这个命令来快速查看一下服务器负载情况,因为w 命令在几乎所有的Unix 下都可以用。
[root@nero oracle]# w
22:10:19 up 3:57, 2 users, load average: 0.10, 0.12, 0.09
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
oracle pts/1 192.168.0.1 18:19 0.00s 0.72s 0.14s sshd: oracle [p
oracle :0 - 21:47 ?xdm? 3:55 1.10s /usr/bin/gnome-
上面的输出中的 load average 分别是过去 1分钟、5分钟、15分钟的负载情况。如果大于 1说明CPU 紧张。
使用 iostat
iostat显示物理磁盘 I/O情况。下面的 3表明3秒钟显示一次。
[root@nero oracle]# iostat 3
Linux 2.6.9-78.ELsmp (nero) 2009年08月23日
avg-cpu: %user %nice %sys %iowait %idle
0.67 0.43 4.00 0.69 94.20
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 3.77 54.13 57.02 784694 826496
sda1 3.76 54.00 57.02 782802 826496
sda2 0.00 0.06 0.00 908 0
avg-cpu: %user %nice %sys %iowait %idle
2.01 0.33 3.34 0.00 94.31
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 3.01 0.00 74.92 0 224
sda1 3.01 0.00 74.92 0 224
sda2 0.00 0.00 0.00 0 0
上面比较重要的列:
Kb_read:过去的时间区间内读取得K 字节数。(第一个显示的是历史总计,因此要看变
化情况,应该看其它的时间区间。)
Kb_wrtn: 过去的时间区间内写入得 K 字节数。
汗,记住就行~
评论: 0 | 引用: 0 | 查看次数: 160
发表评论
上一篇
下一篇


文章来自:
Tags: 





