当前位置: 首页 > 科技观察

如何灵活使用Linux进程资源监控和进程限制

时间:2023-03-20 20:57:35 科技观察

每个Linux系统管理员都应该知道如何验证硬件、资源和主要进程的完整性和可用性。此外,为每个用户设置资源限制是必备技能之一。在这篇文章中,我们将描述一些确保系统硬件和软件正常工作的方法,这些方法可以避免潜在的问题而导致生产环境下线或损失资金。报告Linux进程统计信息您可以使用mpstat单独查看每个处理器或整个系统的活动,一次一个快照或动态更新。为了使用这个工具,你首先需要安装sysstat:#yumupdate&&yuminstallsysstat[基于CentOS的系统]#aptitutdeupdate&&aptitudeinstallsysstat[基于Ubuntu的系统]#zypperupdate&&zypperinstallsysstat[基于openSUSE的系统]你可以学习Sysstat及其工具mpstat,pidstat,iostat和sar,了解有关sysstat及其工具的更多信息。一旦安装了mpstat,它就可以用来生成处理器统计报告。可以使用以下命令每2秒显示一次所有CPU(用-PALL表示)的CPU利用率(-u),共3次。#mpstat-PALL-u23示例输出:Linux3.19.0-32-generic(tecmint.com)Wednesday30March2016_x86_64_(4CPU)11:41:07ISTCPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11:41:09ISTALL5.850.001.120.120.000.000.000.000.000.000.0092.9111:41:09IST04.480.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.0094.5311:41:41:41:09IST12.500.000.000.000.000.000.000.000.000.000.009.000.009.009.009.009.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.0097.usist....120.500.000.000.000.000.0086.6611:41:11IST010.500.001.000.000.000.000.000.000.0088.5011:41:11IST114.360.001.492.480.000.000.000.000.0081.6811:41:11IST22.000.501.000.000.000.000....000.000.000.000.0093.0711:41:13IST02.970.001.490.000.000.000.000.000.0095.5411:41:13IST110.780.001.470.000.000.000.000.000.0087.7511:41:13ist22.000.001.000.000.000.000.000.000.000.000.0097.0011:41:13ist36.000.000.000.000.000.000.000.0092.57A.%guest%gnice%idleagerverication:all7.710.041.160.210.000.000.000.000.000.000.0090.89Aaververy:05.970.001.160.000.000.000.000.000.000.000.000.000.0092.87A.000.000.000.000.000.0095.35Average:312.250.001.160.000.000.000.000.000.0086.59要查看指定的CPU(下例中的CPU0),可以使用:#mpstat-P0-u23示例输出:Linux3.19.0-32-generic(tecmint.com)Wednesday30March2016_x86_64_(4CPU)11:42:08ISTCPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11:42:10IST03.000.000.500.000.000.000.000.000。0096.5011:42:12IST04.080.000.002.550.000.000.000.000.000.000.000.0093.3711:42:14ist09.740.50.50.000.000.000.000.000.000.000.000.000.000.000.0089.74Averery:05.580.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.233.233.233.233.23.233.2CPU:用整数表示的处理器编号,或者all表示所有处理器的平均值%usr:运行在用户级别的应用程序的CPU利用率百分比。%nice:与%usr相同,但优先级较高。%sys:执行内核应用程序的CPU使用率百分比。这不包括服务中断或硬件请求所花费的时间。%iowait:指定(或全部)CPU空闲时间的百分比,表示当前CPU处于密集I/O操作状态。%irq:处理硬件中断所花费的时间百分比。%soft:和%irq一样,但是是软中断。%steal:虚拟机非自愿等待(timeslicestealing)的时间百分比,即虚拟机在竞争CPU时从hypervisor“赢”的时间。该值应尽可能小。如果该值较大,则表示虚拟机正在或将要停止运行。%guest:运行虚拟处理器所花费的时间百分比。%idle:CPU未运行任何任务的时间百分比。如果您观察到这个值很小,则表示系统负载很重。在这种情况下,您需要查看详细的进程列表,如下所述,以确定是什么原因造成的。通过运行以下命令将处理器置于极端负载下,然后在另一个终端中执行mpstat命令:#ddif=/dev/zeroof=test.isobs=1Gcount=1#mpstat-u-P023#ping-flocalhost#InterruptwithCtrl+Caftermpstatbelowcompletes#mpstat-u-P023最后对比一下mpstat在“正常”情况下的输出:报告Linux处理器相关统计信息可以判断CPU0负载高。在下一节中,我们将讨论如何识别资源匮乏的进程、如何获取有关它们的更多信息以及如何采取适当的措施。Linux进程报告我们可以使用著名的ps命令通过-eo选项(根据用户定义的格式选择所有进程)和--sort选项(指定自定义排序顺序)按CPU使用顺序列出进程,对于例子:#ps-eopid,ppid,cmd,%cpu,%mem--sort=-%cpu上面的命令只会显示PID,PPID,和进程相关的命令,CPU使用率和RAM使用率,并按降序排列CPU使用顺序。在创建.iso文件的同时运行上面的命令,这里是输出的前几行:FindprocessesbasedonCPUusage一旦我们找到感兴趣的进程(例如,PID=2822的进程),我们可以输入/proc/PID(本例中为/proc/2822)列出目录内容。该目录是进程运行时保存进程详细信息的多个文件和子目录的目录。例如:/proc/2822/io:包括进程的IO统计信息(IO操作时读写的字符数)。/proc/2822/attr/current:显示进程当前的SELinux安全属性。/proc/2822/cgroup:如果启用了CONFIGCGROUPS内核设置选项,这里会显示进程所属的控制组(简称cgroups)。您可以使用以下命令来验证是否启用了CONFIGCGROUPS:#cat/boot/config-$(uname-r)|grep-icgroups如果启用了此选项,您应该看到:CONFIG_CGROUPS=y根据第1到4章RedHatEnterpriseLinux7ResourceManagementGuide,Chapter9,OpenSUSESystemAnalysisandTuningGuide,在Ubuntu14.04服务器文档的ControlGroups部分,可以使用cgroups来管理每个进程允许使用的资源数量。/proc/2822/fd该目录包含指向每个描述进程的打开文件的符号链接。下面的屏幕截图显示了在tty1(第一个终端)中创建.iso映像的过程的信息:查找Linux进程信息上面的屏幕截图显示了stdin(文件描述符0)、stdout(文件描述符1)、stderr(文件描述符字符2))相应地映射到/dev/zero、/root/test.iso和/dev/tty1。在Linux中设置每个用户的资源限制如果您不够小心以允许任意用户使用无限数量的进程,您可能最终会遇到意外的系统关闭或在系统进入不可用状态时被锁定。为防止这种情况发生,您应该限制用户可以启动的进程数。您可以通过在/etc/security/limits.conf文件末尾添加以下行来设置限制:*hardnproc10第一个字段可用于表示用户、组或所有人(*),第二个字段强制执行限制可以使用的进程数(nproc)为10,注销重新登录使设置生效。然后,让我们看看当非root用户(合法与否)试图引发shellfork炸弹时会发生什么。如果我们没有设置限制,shellfork炸弹将无限期地启动该函数的两个实例,然后在无限循环中复制其中一个实例。最终你的系统死机了。但是,如果使用上述限制,堡垒炸弹不会成功,但用户仍然会被锁定,直到系统管理员杀死相关进程。运行ShellForkBombTips:Limits.conf文件可以查看其他ulimit可以改变的限制。其他Linux进程管理工具除了上面讨论的工具之外,系统管理员可能还需要:a)使用renice调整执行优先级(系统资源的使用)。这意味着内核将根据分配的优先级(称为“niceness”,是一个介于-20到19之间的整数)为进程分配或多或少的系统资源。值越小,执行优先级越高。普通用户(非root)只能增加自己进程的niceness值(即优先级较低),而root用户可以增加或减少任何进程的niceness值。renice命令的基本语法如下:#renice[-n]identifiernewpriority(空)后如果没有参数,默认为PID。在这种情况下,具有PID=identifier的进程的niceness值将被设置为b)在必要时中断进程的正常执行。这就是通常所说的“杀死”进程。从本质上讲,这意味着向进程发送信号以使其正常结束运行并以有序的方式释放所有占用的资源。使用kill命令按以下方式终止进程:#killPID或者,您也可以使用pkill结束指定用户(-u)、指定组(-G)甚至公共父进程ID(-)的所有进程)。这些选项后面可以跟数字或命名标识符。#pkill[options]identifier例如:杀死组GID=1000的所有进程。#pkill-G1000杀死所有PPID为4993的进程。#pkill-P4993在运行pkill之前,使用pgrep测试结果,或者使用-l选项列出进程名称是一个不错的方法。它采用与pkill相同的参数,但只返回进程的PID(没有其他操作),而pkill会终止进程。#pgrep-l-ugacanepa如下图所示:Finduser-runningprocessesinLinux总结在这篇文章中,我们探讨了一些监控资源使用情况的方法,以验证Linux系统中关键硬件和软件组件的完整性和完整性可用性。我们还学习了如何在特殊情况下采取适当的行动(通过调整给定进程的执行优先级或终止进程)。我们希望本文介绍的概念对您有所帮助。