分类:
2008-04-27 13:09:49
【51CTO.com独家特稿】目前,由于UNIX操作系统的诸多优点,主流ISP基本采用UNIX作为提供服务的系统平台,其中Solaris占了其中的很大比例。在Solaris的维护中,经常出现的是系统性能维护上的问题,影响系统性能的因素有很多,本文从对系统的平均负荷、进程监视、CPU、I/O及内存管理、网络流量诊断等方面进行了分析阐述,给出了在Solaris性能监控上的一些方法和经验。当服务器系统性能突然低于平均应有的情况,问题可能来自在执行的进程、内存的使用率、磁盘的性能和CPU 的压力。在预算有限的时代,理解如何优化系统性能比以往任何时候都重要。要实现它的前提是,你必须充分了解自己的服务器,从而找到真正的瓶颈所在。本文提供一些基础的工具来辨别和处理一些性能问题。工作过程是:首先查看整个系统的状态(服务器整体)后是检查特定的子系统(内存、处理器、IO等)。本文以Solaris 10 为例。
一、系统负载监测
1.使用uptime命令
使用uptime命令可以查看系统负载,系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:没有在等待I/O操作的结果、它没有主动进入等待状态(也就是没有被调用、没有被停止。
# uptime
9:51pm up 39 days, 4:43, 4 users, load average:1.02, 1.90, 1.44
上面命令显示示最近1 分钟内系统的平均负载是1.02,在最近5分钟内系统的平均负载是1.90,在最近的15 分钟内系统的平均负载是1.44。一共四个用户。通常来说只要每个CPU的当前活动进程数不小于1那幺系统的性能就是良好的,如果每个CPU的任务数大于5,那幺就表示这台机器的性能有严重问题。
2.使用cron命令进行定时监测系统负载:
cron是一个守护进程,它提供定时器的功能,让用户在特定时间执行命令,首先使用命令:“chkconfig -list|grep crond”查看该服务是否启动,然后使用命令:
# crontab -e
此时打开一个vi编辑器:输入以下内容:
#30 * * * * * uptime
存盘退出,这样每隔30分钟就记载其平均负载,这样累计一天,我们就可以得到最近一天的平均负载。
二、Unix进程运行的监测
1.使用ps命令
Unix系统提供了ps等察看进程信息的系统调用,通过结合使用这些系统调用,我们可以清晰地了解进程的运行状态以及存活情况,从而采取相应的措施,来确保Unix系统的性能。它们是目前在Unix下最常见的进程状况查看工具,是随 Unix版本发行的,安装好系统之后,用户就可以使用。 这里以ps命令为例,ps命令是最基本同时也是非常强大的进程查看命令。利用它可以确定有哪些进程正在运行及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。ps命令可以监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,如果需要检测其情况,可以使用使用ps -el命令。ps-el|more命令输出的例子。
表 1 ps 报告中字段的汇总:
字段 |
说明 |
F |
用数值表示目前进程的状态 |
S |
用字符表示目前进程的状态 |
UID |
进程所有者的有效用户 ID。 |
PID |
进程 ID。 |
PPID |
父进程 ID。 |
C |
用于调度的处理器使用率。使用 -c 选项时,将不显示此字段。 |
CLS |
进程所属的调度类,例如实时、系统或分时。只有 -c 选项包括此字段。 |
PRI |
内核线程的调度优先级。数值越大,表示优先级越高。 |
NI |
进程的nice数值,该数值对其调度优先级有影响。使进程“更好”,意味着降低其优先级。 |
ADDR |
proc 结构的地址。 |
SZ |
进程的虚拟地址大小。 |
WCHAN |
进程休眠的事件或锁定的地址。 |
STIME |
以小时、分钟和秒表示的进程开始时间。 |
TTY |
从中启动进程或其父级的终端。问号表示没有控制终端。 |
TIME |
进程自开始以来使用的 CPU 时间总量。 |
CMD |
生成进程的命令。 |
在进行运行时,如果CPU占用增加而又不知道是哪一个进程造成的情况。使用命令:
#ps -el | sort +4n
说明:因为c选项在第4列,所以sort 选4作参数,+表示升序输出结果。
2.使用进程监控工具
如果安装了CDE环境,可以使用图形界面进程等系统信息,使用方法是单击“前面板”上“工具”子面板上的“查找进程”控件。 显示“进程管理器”主窗口。它立即对工作站进行采样,并显示所有当前进程的采样。如图1 。
图1 进程管理器 |
图1进程管理器列表中的每个进程项会以表1中解释的那样给出有用的信息:
表2进程信息
列标题 |
含义 |
ID |
进程 ID |
名称 |
进程名 |
属主 |
属主名 |
CPU% |
最近使用的 CPU 时间与同一时期中的可用时间之比,以百分数表示 |
RAM |
该进程当前所占用的 RAM 容量 |
交换 |
虚拟内存中的总容量 |
启动于 |
实际启动时间(如果不是当前时间,则为日期) |
父进程 |
父进程的进程 ID,即 “PPID” |
命令 |
执行的实际 UNIX 命令(已截断) |
1. 采样周期的选择
默认情况下,“进程管理器”对工作站进行抽样,并且每隔 30 秒更新一次显示。要禁用/启用连续采样模式,请从“抽样”菜单中选择“停止/启动”。如果启动连续抽样模式,则将在“采样”菜单上看到“停止”菜单项;否则,菜单项将为“启动”。要更改抽样间隔,请在“抽样间隔”框中键入秒数(最大值为 604800,即 14 天)。按回车键以使新的抽样频率生效。要立即抽样,请从“抽样”菜单中选择“现在”。“进程管理器”进行抽样,然后更新显示。
2. 更改显示的排序顺序
默认情况下,“进程管理器”按 CPU 使用的降序列出进程项。因为 CPU 使用列 (CPU%) 上方的列标题是凹陷的,而其它列标题却不是,所以可以知道这一点。要选择用以对进程项列表进行排序的列,请单击相关的列标题或者从“查看”菜单中选择列名称。“进程管理器”将进程项的列表排序,并按照新顺序显示它们。要颠倒任何一列的排序顺序(例如,要按 RAM 使用的升序进行排列),请单击凹陷的列标题按钮。列标题区将变为黑色,并且以相反的顺序对显示进行排序。图2是按照RAM使用的升序的排序ps进程。
图2按照RAM使用的升序的排序ps进程。
图2按照RAM使用的升序的排序ps进程 |
三、内存使用情况监测
内存是Unix内核所管理的最重要的资源之一。内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量。虚拟内存就是为了克服这个矛盾而采用的策略。系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量。Unix支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内容又要使用时,再读回内存。
如果物理内存太少,就会增加交换的次数,性能就会减低。前面使用ps –el命令监测进程,其SZ字段就是检查使用需拟内存的大小。
(1)使甩vmstat命令监视虚拟内存使用情况:
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。通常使用vmstat 5 5(表示在5秒时间内进行5次采样)命令测试。将得到一个数据汇总它可以反映真正的系统情况。
类别 |
字段名 |
说明 |
procs |
进程 |
报告以下内容: |
r |
分发队列中的内核线程数 | |
b |
正在等待资源的阻塞内核线程数 | |
w |
正在等待处理中的资源完成的换出 LWP 数 | |
memory |
内存 |
报告实际内存和虚拟内存的使用情况: |
swap |
可用交换空间 | |
free |
可用列表的大小 | |
page |
分页 |
以秒为单位报告页面错误和分页活动: |
|
re |
回收的页面 |
mf |
次要错误和主要错误 | |
pi |
页入的千字节数 | |
po |
页出的千字节数 | |
fr |
释放的千字节数 | |
de |
最近换入的进程所需的预计内存 | |
sr |
由 page 守护程序扫描的当前未使用的页数。如果 sr 不等于零,则 page 守护程序一直在运行。 | |
disk |
磁盘 |
报告每秒的磁盘操作数,最多显示四个磁盘中的数据 |
faults |
中断 |
报告每秒的陷阱/中断速率: |
in |
每秒的中断次数 | |
sy |
每秒的系统调用数 | |
cs |
CPU 上下文切换速率 | |
cpu |
中央处理器 |
报告 CPU 使用时间: |
us |
用户时间 | |
sy |
系统时间 | |
id |
空闲时间 |
有关此命令的更多详细说明,请参见 vmstat 手册页。