谈谈Solaris系统性能上的维护

发表于:2007-07-13来源:作者:点击数: 标签:
目前,由于 UNIX 操作系统的诸多优点,ISP们大多采用UNIX作为提供服务的系统平台,其中Solaris占了其中的很大比例。在Solaris的维护中,经常出现的是系统 性能 维护上的问题,影响系统性能的因素有很多,本文从对系统的平均负荷、进程监视、CPU、I/O及内存管

     目前,由于UNIX操作系统的诸多优点,ISP们大多采用UNIX作为提供服务的系统平台,其中Solaris占了其中的很大比例。在Solaris的维护中,经常出现的是系统性能维护上的问题,影响系统性能的因素有很多,本文从对系统的平均负荷、进程监视、CPU、I/O及内存管理、网络流量诊断等方面进行了分析阐述,给出了在Solaris性能维护上的一些方法和经验。 

      ---- 
      系统的性能是指该系统完成任务的情况,它的有效性、稳定性和响应速率。系统管理员们常常抱怨系统性能不好、不稳定、系统响应速度太慢等等,所有这类问题仅仅是一些表面现象。整个网络系统的性能的好坏是与网络拓朴结构,服务器系统、路由设备、路由政策、接入设备、物理线路等多个方面密切相关的,任何一个环节出现问题,都会影响整个系统的性能。在优化整个系统性能之前,必须监视、审计每一个环节中系统资源是否合理的使用和分配。服务器和工作站系统性能好坏主要取决于它怎样合理使用和分配它的资源,定期监视、审计系统的性能是非常重要的,而且应该知道要监视系统哪些资源。系统资源包括3个方面: 

      ---- 1、 CPU; 
      ---- 2、 内存子系统; 
      ---- 3、 I/O子系统。 
      ---- 
      这3个方面,不论那一方面存在问题都会对系统性能产生影响,而审计系统性能也是从这3方面入手。审计系统性能的工具很多,在Solaris操作系统中提供了多种用来审计系统资源运行情况的工具,主要包括: 

        The uptime and sar commands,用来报告系统的平均负荷; 

        The ps command,提供系统中正在运行进程的相关信息; 

        The df command,提供有关磁盘使用方面的信息; 

        The vmstat、iostat and sar commands,报告系统活动情况,提供内存使用的相关信息、I/O系统信息、CPU活动等; 

        The swap command,用来统计系统中swap使用情况; 

        The.netstat command,用来显示有关网络性能方面的信息。 
      ---- 
      值得注意的是,对于服务器/工作站系统,由于用户量的不断增加,系统资源的使用和分配可能在一段时间内较为合理,一段时间之后,系统资源可能处于超负荷运行状态,所以说,系统性能管理是一项长期的工作,应将系统性能管理作为日常系统管理工作的一部分,来维护系统可靠、高效运行。 

      ---- 
      在对系统进行性能优化之前,必须知道系统的硬件资源配置、软件资源的使用及整个系统配置是否存在问题。这些问题的发现往往建立在系统给人们的印象上。比如:系统对用户的响应速率慢,进程运行需花更多的时间等等。如果发现了这些现象,就应该采集系统主要资源数据并进行分析,找到提高系统性能的方法。 

      ---- 一、 系统的平均负荷 
      ---- 系统在不同时间内的平均负荷(Last mimute、Last 5 minutes、Last 15 
      minutes)是用来评估系统是否超负荷运行较方便、较常用的一种方法。系统在正常运行的情况下,3个值的范围应在0-2。对于Solaris操作系统,可以用现金条命令获取系统平均负荷(以主机public.hr.hl.cn为例): 

      ---- 1. uptime 
      ---- public.hr.hl.cn% uptime 
      ---- 2:06下午 运行1天 5:27,7 users, 平均负荷:0.00,0.01,0.01 
      ---- 2、sar(system activity 
      reporter)命令本身能用于采集系统活动数据或从sadc建立的每日活动文件中提取系统活动数据。 
public.hr.hl.cn%sar –q(从文件中取数据)
SunOS public.hr.hl.cn 5.5.1 04/08/98
00:00:01 runq-sz %runocc swpq-sz %swpocc
01:00:01  1.0   0            
02:00:01  1.8   0
03:00:01  1.3   0
04:00:01  1.8   0
05:00:01  2.0   0
Average   1.6   0

      ---- 或使用:“sar –options t n ”从当前开始,在t秒(t>=5)时间间隔内,采集n次系统活动数据。 
      ---- 
      runq-sz正常情况下它应小于2。如果此值连续大于2表明系统可能处于CPU-bound状态。如果%runocc大于90,并且runq-sz大于2,表明CPU处于超负荷状态,系统响应速率下降。 

      ---- 二、 系统进程监视 
      ---- 系统中运行的进程都不同程度的消耗系统资源,通过监视这些进程,找到对系统资源影响较大的进程,就能够采取相应措施改善系统性能。 
      ---- 
      在Solaris系统中,可以通过ps命令采集进程数据,系统中有2条ps命令(/usr/bin/ps、/usr/ucb/ps),建议两条命令结合使用,ps命令能够用来监视系统中活动进程的执行状态,它能汇报下列信息: 

        用户名称; 

        进程的ID(PID); 

        CPU使用时间; 

        内存使用情况; 

        当前进程状态; 

        进程的优先级; 

        进程类型。 
      ---- 
      通过观察分析ps命令输出结果,如果发现异常情况,如某个进程占用CPU/MEM过多、某个用户产生很多进程等等,此时的问题不是用户的问题,而是过重的CPU 
      load阻碍用户的访问速率。这时候可以对那些显尔易见的问题采取相应补救措施: 
        如果发现某个用户产生很多进程,占用过多的系统资源,可以kill其中的消耗资源较多的进程,释放系统资源; 

        如果发现某个进程积聚大量时间,这可能指示进程处于无限循环状态或进程出现错误。在咨询这个进程的用户后,可以终止此进程。 

        如果发现某个不很重要的进程消耗大量CPU,可以使用nice/priocntl命令改变此进程的优先级。使它在较低的优先级中运行。 
      ---- 除采取上述措施外,还应该分析其他的问题,通常关心的是那些runnable、blocked for disk I/O、or paging 
      jobs,而不是那些sleeping、stoped进程,因为这些进程并不影响整个系统的性能。如果必要的进程占用内存很大,表明系统可能需要增加内存。 
      ---- 三、 CPU与I/O监控 
      ---- 从PS得到的数据是非常详细的,通常不仅需要知道每个进程的状态,而且还需知道整个系统的状态,有许多方法可以得到整个系统的状态比如: 
      ---- 1、 df命令报告磁盘的使用情况,显示mount or unmount文件系统磁盘空间使用情况; 
      ---- 2、 iostat and vmstat命令显示系统资源状况; 
      ---- 
      iostat命令汇报磁盘I/O状态、进程流通量、队列长度、服务时间等,vmstat命令显示内存使用情况、CPU负荷、paging、系统调用等等。 
      ---- 3、 sar命令收集、报告系统的活动情况。 
      ---- 四、 内存统计管理 
      ---- 
      在系统运行的不同时期,可用内存能否满足程序运行的需求是影响系统性能的一个重要因素。如果可用内存不能满足程序运行的需要,那么系统就重复从物理内存中拷贝一个或多个页面到磁盘,以及从磁盘拷贝页面到内存。在从物理内存中拷贝一个或多个页面到磁盘后,系统为其它任务重新使用这些内存,这就是通常所说的“paging”。一旦系统启动paging,整个系统的性能可能会急剧下降直到系统内存又满足程序运行的需要。总之,当可用内存不能满足系统需要时会影响系统性能;当可用内存满足系统需要时则不会影响系统,因此,应该经常监视有关内存使用数据并进行分析,预测可能发生的问题,扩展内存或调整内存配置参数使系统稳定可靠运行。 

      ---- 通常,系统采取两种方式来满足所有进程对内存的需求:paging and 
      swapping.swapping移动整个进程到磁盘,从而达到回收内存的目的。在下一次系统运行该进程时,它必须从磁盘swap区中拷贝整个进程的内存映象到内存中去。Paging移动进程的部分页面到磁盘来达到回收内存的目的,进程的大多数页面仍保留在内存中。 

      ---- 五、 系统信息的自动采集 
      ---- 
      为获取系统一段时间的活动数据,启用系统信息自动采集是非常必要的,因为它是最容易获取系统信息的一种方式,在系统信息自动采集中有2条命令:sadc、sa1. 

      ---- 
      Sadc命令主要是采集系统活动数据,并将它放在下一个二进制文件中,这个文件只放一天数据,它位于目录/var/adm/sa下,文件名为sadd,其中dd用当前日期代替。 

      ---- 
      为了获取系统不同时期的数据,应该定期运行sadc。其中最简单的方式是在/var/spool/cron/crontabs/sys文件中运行shell 
      script sa1,它运行sadc并将数据写到文件中去。可以使用sar命令从文件摘取系统活动数据。 
      ---- 六、 网络流量诊断 
      ---- 
      网络问题是影响系统性能的问题之一,诊断网络问题最简单的工具当然是使用系统提供的命令netstat,使用“-i”选项,命令netstat能显示接口状态,举例如下: 

public.hr.hl.cn% netstat –I
name mtu  net/dest address  
 ipkts ierrs opkts oerrs collis queue
lo0  8232 loopback localhost 2616  0 
    2616  0     0      0
le0  1500 202.96.30.0 tech    
  75083 0     69325 1     621    0

      ---- 命令结果显示了在每一个接口发送和接收数据包的情况,其中的3项:ierrs、oerrs and collis与网络性能问题有关: 
        ierrs,是指主机从网络接收数据包中包含有多少不正确的数据包,如果ierrs很大,通常表明硬件接口存在问题或硬件驱动器接受数据包较慢,此时应该在不同时间多次采集数据进行比较来决定采取什么措施。正常情况下,ierrs/opkts< 
        0.025%. 

        oerrs,是指主机从网络送出的数据包中包含有多少不正确的数据包。正常情况下oerrs/ipkts< 0.025%. 

        collis,碰撞是在局域网中有两面三刀个或以上系统同时发送数据时产生的,如果碰撞率(collis/opkts)大于5%,说明网络负荷过大。此时应该调整网络结构,减少网络流量。 

原文转自:http://www.ltesting.net