作为AIX®管理员,您应该已经知道如何使用流程的基础知识,包括研究,确定优先级和取消它们。 您还应该知道如何使用可用的各种工具来调整过程并相应地优化它们。 这些工具包括AIX 5.3中提供的一些较新的工具。 为了在您的系统上提供有效的进程控制,必须了解进程和线程的定义以及它们之间的区别。 本文还介绍了ps
, nice
和schedtune
命令,以及“进程监视器控制台”(procmon),AIX Workload Manager(WLM)和其他可用工具。 让我们从流程和线程的定义开始:
- 进程 -进程是系统中以命令,shell脚本或其他进程启动的活动。
- 线程 -线程是一个独立的控制流,它与进程中的其他独立控制流在相同的地址空间内运行。 内核线程是单个顺序控制流。
另一种看待这种情况的方式是,进程是操作系统用来控制系统资源使用的实体,而线程则控制实际处理器时间的消耗。 大多数系统管理工具仍要求您引用该过程而不是线程。 进程本身实际上拥有内核线程,并且每个进程可以具有一个或多个内核线程(例如,多线程应用程序)。 使用线程,您可以在系统上的不同CPU上运行多个线程,这实际上利用了具有多于一个处理器(对称多处理或SMP盒)的计算机。 可以将应用程序设计为具有用户级线程,这些线程可以由应用程序或libpthreads中的pthreads调度程序调度为工作。 多个控制线程允许应用程序同时处理来自多个用户的请求。 通过libpthreads实现,用户线程位于虚拟处理器之上,而虚拟处理器本身又位于内核线程之上。 在本文中,将详细介绍可用于帮助您更有效地管理整个系统的过程和工具的内核方面。 为了帮助您管理环境,请经历久经考验的UNIX®命令以及许多AIX管理员可以使用的新工具。
线程和SMT
允许线程在不同的CPU上运行还可以有效地利用同时多线程(SMT)。 在系统处于SMT模式的情况下,处理器从多个线程中提取指令。 SMT的概念是POWER5架构所独有的,因为没有单个进程可以同时使用所有处理器执行单元。 POWER5设计在每个芯片内核上实现了双向SMT。 最终结果是每个物理处理器核心由两个虚拟处理器代表。 SMT在商业环境中尤其有益,在商业环境中,单个交易的速度不如执行的交易总数那么重要。 预计SMT将增加具有大型或频繁更改的工作集(例如数据库服务器和Web服务器)的工作负载的吞吐量。 浮点密集型工作负载可能不会从SMT获得多少收益,而最有可能失去性能。 这些工作负载大量使用浮点单元或内存带宽。 每条指令周期(CPI)较低且缓存未命中率较低的工作负载可能会带来一些好处。 通常,由于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 -q
The 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繁忙而其他空闲,则实际上可以降低该进程的性能。
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 | more
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
root 8196 12.9 0.0 384 384 - A Jan 08 14695:30 wait
root 57372 12.8 0.0 384 384 - A Jan 08 14542:51 wait
root 61470 12.2 0.0 384 384 - A Jan 08 13884:38 wait
root 53274 12.0 0.0 384 384 - A Jan 08 13711:38 wait
root 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 gil
root 0 0.0 0.0 384 384 - A Jan 08 2:49 swapper
root 49176 0.0 0.0 448 448 - A Jan 08 1:13 xmgc
root 241842 0.0 0.0 23
如果您想要有关该进程的正确值的更多信息,则需要使用-l
标志。 NI列是不错的值(请参见清单5 )。
清单5.使用-l
标志获得漂亮的值
# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
200003 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中的命令将10添加到默认值20,并创建新的nice值30,优先级为70。
运行清单8中的命令导致进程1683的值为30。
清单8.导致进程1683的值为30
# renice -n 10 -p 1683
procmon实用程序
尽管AIX的基本操作系统附带了许多性能工具,但也许是最近(在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
- 进程树
- procsig
- 进程堆栈
- 过程
- 进程图
- procflags
- 被起诉
- 禁止
进程表是procmon的主要组件,它显示系统上正在运行的各种进程,可以根据用户配置对它们进行排序和过滤。 尽管默认情况下,表中列出的进程数为20,但是可以使用主菜单中的“表属性”面板轻松地更改进程。 请参阅相关主题有关此重要工具的更多信息。
WLM
WLM是一个复杂的工具,可用于性能监视,收集会计数据以及管理独立系统上的负载。 您也可以将其(与DLPAR一起)用作分区环境中的资源供应工具。 这是系统管理员监视和控制进程资源使用情况的有效方法。
AIX上的WLM功能提供了一组工具,可帮助收集性能统计信息并为您提供一种控制资源分配给流程的机制。 它旨在与运行多个应用程序,数据库和事务处理系统的大型系统一起使用,在这些系统中,工作负载被组合到一个大型系统中(“垂直”服务器合并)。 它提供了在作业之间划分系统资源的灵活性,而不必对系统进行分区。 您可以使用WLM防止不同类别的作业相互干扰,并根据不同用户组的需求分配资源。 许多人将其与分区负载管理器(PLM)混淆,后者是一种资源管理器,它根据定义的策略以及包含Advanced Power Virtualization的IBM System p™环境中的资源利用情况来分配和移动资源。 PLM使用微分区技术重新调整资源,从而能够管理内存,专用处理器分区和共享处理器分区。 这为POWER Hypervisor提供的微分区灵活性增加了额外的灵活性。 不幸的是,PLM不了解分区中运行的任何工作负载的重要性,因此无法根据工作负载类型的变化重新调整优先级。
结论
成为UNIX系统管理员并不是最令人激动的过程。 尽管这可能很乏味,但这是系统管理的必要弊端。 您始终必须就如何加快流程以及为何花这么长时间才能完成流程提出疑问。 您需要确定有问题的流程,并尽一切可能使它们更有效地运行。 您还必须确定执行任务的最佳工具,无论是仅运行ps
命令并使用renice,还是使用诸如procmon之类的新性能实用程序,或者引入诸如WLM之类的企业范围的流程调度实用程序来帮助管理所有任务。您的系统处理效率更高。 在引入任何新元素之前,请尝试对进程和调度的内核概念进行一些其他研究。 如果您真的了解自己在做什么,那么从长远来看,在开始工作之前,它将大有帮助。
翻译自: https://www.ibm.com/developerworks/aix/library/au-aixprocesscontrol/index.html