AIX 上的进程优先级与进程控制.doc_第1页
AIX 上的进程优先级与进程控制.doc_第2页
AIX 上的进程优先级与进程控制.doc_第3页
AIX 上的进程优先级与进程控制.doc_第4页
AIX 上的进程优先级与进程控制.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

引言作为一名 AIX 管理员,您应该已经了解有关如何处理进程的基础知识,包括研究进程、设置进程的优先级和终止进程。此外,您还应该知道如何使用手头的各种工具来调整进程并相应地进行优化。这些工具包括 AIX 5.3 中新增的一些工具。要在系统上提供有效的进程控制,您必须了解进程和线程的定义以及二者之间的区别。本文还将介绍ps、nice、schedtune命令以及进程监视器控制台 (procmon)、AIX 工作负载管理器 (WLM) 和其他可供使用的工具。让我们先从进程和线程的定义开始: 进程进程是指系统内部由命令、Shell 脚本或其他进程启动的活动。 线程线程是一个独立的控制流,它与其他独立的控制流一起在进程内部的同一地址空间中运行。内核线程是单个顺序控制流。看待这种区别的另一种方式是,进程是系统用于控制系统资源使用情况的实体,而线程则控制实际使用的处理器时间。大多数系统管理工具仍要求参考进程而不是线程。实际上,进程本身也拥有内核线程,每个进程可具有一个或多个内核线程(例如多线程应用程序)。对于线程,您可以在系统上的不同 CPU 中运行多个线程,从而真正利用多处理器计算机(对称多路处理机,又称 SMP 机)的优势。应用程序在设计上可拥有多个用户级线程,并将它们计划为由应用程序或 libpthread 中的 pthread 调度程序处理。多个控制线程允许应用程序同时为来自多个用户的请求提供服务。在 libpthread 实现中,用户线程位于虚拟处理器之上,而虚拟处理器本身又位于内核线程之上。本文将对进程的内核方面进行深入研究,同时探讨有助于提高整个系统管理效率的工具。为帮助您有效管理环境,我们将详细介绍久经试验的 UNIX 命令以及很多可供 AIX 管理员使用的新型工具。线程和 SMT通过允许在不同的 CPU 上运行多个线程,还可以有效利用同步多线程 (SMT)。当系统处于 SMT 模式下时,处理器可以从多个线程中获取指令。SMT 的概念专门用于 POWER5 体系结构,它指的是单个进程不能同时使用所有处理器执行单元。POWER5 设计可在每个芯片内核上实现双向 SMT。其结果是,每个物理处理器内核将由两个虚拟处理器表示。SMT 在商业环境中特别有用,因为在这种环境中,单个事务的处理速度与所执行的总事务数相比并不那么重要。借助于大型或更改频繁的工作集(例如数据库服务器和 Web 服务器),SMT 应能够增大工作负荷的吞吐量。浮点密集型工作负荷很少能从 SMT 中获益,因而是最可能降低性能的因素。这些工作负荷会占用大量的浮点单元或内存带宽。每条指令的平均时钟周期数 (CPI) 和缓存未命中率都较低的工作负荷可能会从 SMT 得到少许益处。通常情况下,SMT 应能够使系统性能提高约 30%。您必须确定系统上运行的关键进程是否可从 SMT 获益。关键进程通常可以从 SMT 获益;但是,如果您确定的情况并非如此,则需要将其关闭,因为这些进程在缺省情况下处于启用状态。计划概念我尽量不在 AIX 调度程序的内核构造方面花费太多的时间,但在介绍进程管理或调度程序优化之前,您需要对这些知识有更好的了解。系统上的每个 CPU 都有自己专用的运行队列,该队列是按线程优先级值排序的可运行线程的列表。另外,还有一种运行队列,称为全局运行队列。所有新线程都被放在全局运行队列中。每当 CPU 准备分派线程时,它都会先检查此全局运行队列,然后再检查其他运行队列。在 CPU 上,当一个线程完成它的时间切片后,它将返回原来运行它的 CPU 运行队列。这有助于 AIX 维护它的处理器关联性。(我将在后面对处理器关联性进行详细讨论。)您可以优化某些环境变量来提高调度程序的性能,但这已超出本文的论述范围。系统上的 CPU 由所有线程共享,其方式是向每个线程都提供一定的时间切片来运行。缺省时间切片是 10 毫秒(一个时钟计时单元)。使用schedo命令可以更改这一缺省值。增加时间切片可减少上下文切换,从而可以提高系统吞吐量。使用vmstat或sar命令可以查看上下文切换。如果上下文切换的值非常高,则增加时间切片可提高性能,但这必须在经过大量分析之后才能实施。在系统模式方面,CPU 有两种运行模式:内核模式和用户模式。在用户模式中,程序对进程专用区域中的用户数据具有读写访问权限。此模式是进程积累其大多数 CPU 时间所在的模式。另一种模式是内核模式。以内核模式运行的某些程序包括中断处理程序和内核进程。当在某个进程的上下文中执行以此模式运行的代码时,它不仅对全局内核地址空间具有读写访问权限,还将对该进程中的内核数据也具有读写访问权限。对于进程地址空间中的用户数据,必须使用内核服务进行访问。当用户程序访问系统调用时,它将在内核模式而不是用户模式下进行。您需要理解这一概念,才能尝试解释vmstat和sar等命令的输出。处理器关联性和绑定处理器处理器关联性是操作系统提供的在 SMP 硬件上使用的工具。从本质上讲,进程中的所有线程都可以绑定到指定的处理器上运行。AIX 会在每个 CPU 上都设置一个运行队列,以此来自动尝试推动处理器关联性的建立,这一点我在前面已经讨论过。通过使用进程关联性来绑定线程或取消线程的绑定,可帮助您找到难以调试的挂起或死锁的根本原因。对于某些应用程序,如果将它们的线程始终绑定在特定的 CPU 上运行,还可能提高其运行速度。在典型的 SMP 系统中,所有处理器都完全相同并可以在其系统上运行任意线程。从本质上讲,任何进程或线程都可以分派到任意处理器上运行,但绑定在特定处理器上运行的处理器或线程除外。此操作可通过bindprocessor命令实现。让我们看一个示例(请参见清单 1)。清单 1. 使用 bindprocessor 命令 # bindprocessor -qThe available processors are: 0 1 2 3在此示例中,您可以看到有四个处理器可供调用。这些可用的处理器是:0、1、2、3。以下命令显示了绑定到 CPU 3 的处理器(请参见清单 2)。清单 2. 发现绑定到 CPU 3 的处理器 # ps -emo THREAD | grep p3 root 401544 389152 - A 0 60 1 f10001001ece2fb8 200001 pts/0 - grep p3您还可以使用 SMIT 快速路径smit bindproc来帮助绑定进程。另一种绑定进程的方式是,使用 AIX 上可用的 bindprocessor API 在程序内部执行绑定。您应明白,这些命令的功能十分强大。在将进程绑定到 CPU 时,如果该 CPU 正处于繁忙状态,而其他 CPU 却处于空闲状态,则绑定操作实际上会降低该进程的性能。PS认识您很高兴让我们讨论一下通常可用于识别和处理进程的命令。要获得一个较长的文件清单,请使用以下命令,如清单 3所示。清单 3. 获取较长的文件清单 # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Jan 08 - 0:05 /etc/init root 82126 204974 0 Jan 08 - 0:00 /usr/sbin/snmpmibd root 86210 106640 0 Jan 08 - 0:00 /usr/dt/bin/dtcm root 90172 123038 0 Jan 08 - 0:35 /usr/lpp/X11/bin/X -D /usr/lib/X11/rgb -T -force :0 -auth /var/dt/A:0-DjUjUa root 98390 1 0 Jan 08 - 8:36 /usr/sbin/syncd 60 root 106640 131160 0 Jan 08 - 0:25 /usr/dt/bin/dtsession要进一步识别由 CPU 占用者分解的进程,请参见清单 4。清单 4. 识别进程 # ps aux | moreUSER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMANDroot 8196 12.9 0.0 384 384 - A Jan 08 14695:30 waitroot 57372 12.8 0.0 384 384 - A Jan 08 14542:51 waitroot 61470 12.2 0.0 384 384 - A Jan 08 13884:38 waitroot 53274 12.0 0.0 384 384 - A Jan 08 13711:38 waitroot 245938 0.0 0.0 828 856 - A Jan 08 20:17 /usr/bin/xmwlm -root 98390 0.0 0.0 508 516 - A Jan 08 8:36 /usr/sbin/syncd root 69666 0.0 0.0 960 960 - A Jan 08 3:46 gilroot 0 0.0 0.0 384 384 - A Jan 08 2:49 swapperroot 49176 0.0 0.0 448 448 - A Jan 08 1:13 xmgcroot 241842 0.0 0.0 23如果要了解有关进程的优先值的更多信息,则需要使用-l标志。“NI”列显示了优先值(请参见清单 5)。清单 5. 使用-l标志获取优先值 # ps -elfF S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD200003 A root 1 0 0 60 20 14001400 660 Jan 08 - 0:05 /etc/init 240001 A root 82126 204974 0 60 20 3c22b510 1264 Jan 08 - 0:00 /usr/sbin/snmpmibd 240801 A root 86210 106640 0 60 20 584d2400 2156 Jan 08 - 0:00 /usr/dt/bin/dtcm 240001 A root 90172 123038 0 60 20 5136 f1000100224650e0 5136 Jan 08 - 0:35 /usr/lpp/X11/bin/X -D /usr/lib/X11/rgb -T -force :0 -auth /var/dt/A:0-DjUjUa 240001 A root 98390 1 0 60 20 41a5400 508 * Jan 08 - 8:36 /usr/sbin/syncd 60 240001 A root 106640 131160 0 60 20 3816a400 1880 Jan 08 - 0:25 /usr/dt/bin/dtsession 40001 A root 123038 1 0 60 20 5c153400 380 Jan 08- 0:00 /usr/dt/bin/dtlogin -daemon清单 6中的命令提供了前三个正在执行的进程,并给出了它们的优先值。清单 6. 获取前 3 个正在执行的进程 # ps -elf | egrep -v STIME|$LOGNAME | sort +3 -r | head -n 15 40401 A nobody 323762 127128 0 60 20 602dc400 660 f1000600002daa08 Jan 08 - 0:00 /usr/HTTPServer/bin/httpd -d /usr/HTTPServer -k restart 40001 A nobody 319662 127128 0 60 20 6c35f400 1336 * Jan 08 - 0:00 /usr/HTTPServer/bin/httpd -d /usr/HTTPServer -k restart 40001 A nobody 307358 127128 0 60 20 3834a400 1340 * Jan 08 - 0:00 /usr/HTTPServer/bin/httpd -d /usr/HTTPServer -k restart 240001 A daemon 254084 204974 0 60 20 58272400 1364 Jan 08 - 0:00 /usr/sbin/rpc.statd -d 0 -t 50现在,您已经知道了终止系统的是哪些进程(您也可以使用 topas 或 nmon),下面该如何处理呢?如果有一个命令能让您对内核的处理计划设置优先级,是不是就完美无缺了?当然有这样的命令,不仅如此,还有另一个命令允许您对已经运行的进程再次设置优先级。这两个命令分别是nice和renice。在 AIX 中,用户作业的基本优先级为 40,其缺省优先值为 20。这两个数字一起构成了缺省优先级 60。绝大多数作业都使用此值。缺省优先级编号越高,作业的优先级就越低。如果要以较低的优先级启动作业,则可以尝试清单 7中的命令。清单 7. 以较低的优先级启动作业 # nice -n 10 thisjob清单 7中的命令在缺省值 20 上又增加 10,从而创建出新的优先值 30 和优先级 70。运行清单 8中的命令导致进程 1683 的优先值变为 30。清单 8. 导致进程 1683 的优先值变为 30 # renice -n 10 -p 1683procmon 实用工具尽管 AIX 的基本操作系统附带了很多性能工具,但在最近引入的性能监视工具中,最好的可能莫过于 procmon(在 AIX 5.3 中引入)。此实用工具会显示一个动态的进程列表,此列表已经过排序,可提供有关这些进程的所有信息。它允许执行nice、renice和kill等基本的管理命令。procmon 工具在 Performance Workbench 平台上运行,此工具基于 Eclipse,并具有一个小巧的图形用户界面来显示系统活动。要启动 procmon,请启动 perfwb,后者将启动带有 procmon 插件的 Eclipse(请参见清单 9)。在此过程中,您需要使用 bos.perf.gtools.perfwb 文件集。清单 9. 启动 perfwb # /usr/bin/perfwb缺省情况下,procmon 工具将显示以下内容: 进程已运行的时间长度 进程正在使用的 CPU 资源数量 进程是否正受到系统处罚 进程正在使用的内存量 进程所执行的 I/O 次数 进程的优先级和优先值 创建特定进程的人员此外,它还具有下列选项可供执行: procfiles proctree procsig procstack procrun procmap procflags proccred procldd进程表是 procmon 的主要组件,它显示了正在系统上运行的各个进程,您可以根据用户配置对它们进行排序和筛选。缺省情况下,进程表中列出的进程数是 20,但使用主菜单中的 Table Properties 面板,用户可以轻松地更改进程数。有关此重要工具的更多信息,请参见参考资料。WLMWLM 是一个复杂的工具,可用于监视性能、收集记帐数据以及管理独立系统上的负荷。在分区环境中,此工具还可以用作(配合 DLPAR)资源提供工具。对系统管理员而言,这种方式可有效监视并控制进程的资源使用情况。AIX 上的 WLM 功能提供了一系列有用的工具,它们不仅有助于收集性能统计信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论