首页 > 系统相关 >如何灵活运用Linux 进程资源监控和进程限制

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

时间:2023-05-08 17:44:39浏览次数:48  
标签:11 0.00 IST 灵活运用 Linux 进程 41 CPU

报告 Linux 进程统计信息

你可以使用 mpstat 单独查看每个处理器或者系统整体的活动,可以是每次一个快照或者动态更新。

为了使用这个工具,你首先需要安装 sysstat:

# yum update && yum install sysstat              [基于 CentOS 的系统] # aptitutde update && aptitude install sysstat   [基于 Ubuntu 的系统] # zypper update && zypper install sysstat        [基于 openSUSE 的系统] 

你可以在 Linux 中学习 Sysstat 和其中的工具 mpstat、pidstat、iostat 和 sar,了解更多和 sysstat 和其中的工具相关的信息。

安装完 mpstat 之后,就可以使用它生成处理器统计信息的报告。

你可以使用下面的命令每隔 2 秒显示所有 CPU(用-P ALL 表示)的 CPU 利用率(-u),共显示3次。

# mpstat -P ALL -u 2 3

示例输出:

Linux 3.19.0-32-generic (tecmint.com)   Wednesday 30 March 2016     _x86_64_    (4 CPU)  11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91 11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53 11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00 11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57 11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56  11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66 11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50 11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68 11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50 11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60  11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07 11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54 11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75 11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00 11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57  Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89 Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87 Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78 Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35 Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59 

要查看指定的 CPU(在下面的例子中是 CPU 0),可以使用:

# mpstat -P 0 -u 2 3

示例输出:

Linux 3.19.0-32-generic (tecmint.com)   Wednesday 30 March 2016     _x86_64_    (4 CPU)  11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50 11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37 11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74 Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23 

上面命令的输出包括这些列:
CPU: 整数表示的处理器号或者 all 表示所有处理器的平均值。
%usr: 运行在用户级别的应用的 CPU 利用率百分数。
%nice: 和 %usr相同,但有 nice 优先级。
%sys: 执行内核应用的 CPU 利用率百分比。这不包括用于处理中断或者硬件请求的时间。
%iowait: 指定(或所有)CPU 的空闲时间百分比,这表示当前 CPU 处于 I/O 操作密集的状态。
%irq: 用于处理硬件中断的时间所占百分比。
%soft: 和%irq相同,但是是软中断。
%steal: 虚拟机非自主等待(时间片窃取)所占时间的百分比,即当虚拟机在竞争 CPU 时所从虚拟机管理程序那里“赢得”的时间。应该保持这个值尽可能小。如果这个值很大,意味着虚拟机正在或者将要停止运转。
%guest: 运行虚拟处理器所用的时间百分比。
%idle: CPU 没有运行任何任务所占时间的百分比。如果你观察到这个值很小,意味着系统负载很重。在这种情况下,你需要查看详细的进程列表、以及下面将要讨论的内容来确定这是什么原因导致的。
运行下面的命令使处理器处于极高负载,然后在另一个终端执行 mpstat 命令:

# dd if=/dev/zero of=test.iso bs=1G count=1 # mpstat -u -P 0 2 3 # ping -f localhost # Interrupt with Ctrl + C after mpstat below completes # mpstat -u -P 0 2 3 

最后,和 “正常” 情况下 mpstat 的输出作比较:

LFCS 系列第十四讲: Linux 进程资源用量监控和按用户设置进程限制

正如你在上面图示中看到的,在前面两个例子中,根据%idle的值可以判断 CPU 0 负载很高。

在下一部分,我们会讨论如何识别资源饥饿型进程,如何获取更多和它们相关的信息,以及如何采取恰当的措施。

Linux 进程报告

我们可以使用有名的ps命令,用-eo选项(根据用户定义格式选中所有进程) 和--sort选项(指定自定义排序顺序)按照 CPU 使用率排序列出进程,例如:

# ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

上面的命令只会显示PID、PPID、和进程相关的命令、 CPU 使用率以及 RAM 使用率,并按照 CPU 使用率降序排序。创建 .iso 文件的时候运行上面的命令,下面是输出的前面几行:
LFCS 系列第十四讲: Linux 进程资源用量监控和按用户设置进程限制

一旦我们找到了感兴趣的进程(例如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 -i cgroups

如果启用了该选项,你应该看到:

CONFIG_CGROUPS=y

根据红帽企业版 Linux 7 资源管理指南第一到四章的内容、openSUSE 系统分析和调优指南第九章、Ubuntu 14.04 服务器文档Control Groups 章节,你可以使用cgroups管理每个进程允许使用的资源数目。

/proc/2822/fd这个目录包含每个打开的描述进程的文件的符号链接。下面的截图显示了 tty1(第一个终端) 中创建 .iso 镜像进程的相关信息:

LFCS 系列第十四讲: Linux 进程资源用量监控和按用户设置进程限制

上面的截图显示 stdin(文件描述符 0)、stdout(文件描述符 1)、stderr(文件描述符 2) 相应地被映射到 /dev/zero、 /root/test.iso 和 /dev/tty1。

在 Linux 中为每个用户设置资源限制

如果你不够小心、让任意用户使用不受限制的进程数,最终你可能会遇到意外的系统关机或者由于系统进入不可用的状态而被锁住。为了防止这种情况发生,你应该为用户可以启动的进程数目设置上限。

你可以在 /etc/security/limits.conf 文件末尾添加下面一行来设置限制:* hard nproc 10
第一个字段可以用来表示一个用户、组或者所有人(*), 第二个字段强制限制可以使用的进程数目(nproc) 为 10。退出并重新登录就可以使设置生效。

然后,让我们来看看非 root 用户(合法用户或非法用户) 试图引起 shell fork 炸弹时会发生什么。如果我们没有设置限制, shell fork 炸弹会无限制地启动函数的两个实例,然后无限循环地复制任意一个实例。最终导致你的系统卡死。

但是,如果使用了上面的限制,fort 炸弹就不会成功,但用户仍然会被锁在外面直到系统管理员杀死相关的进程。

LFCS 系列第十四讲: Linux 进程资源用量监控和按用户设置进程限制

提示:limits.conf文件中可以查看其它 ulimit 可以更改的限制。

其它 Linux 进程管理工具

除了上面讨论的工具, 一个系统管理员还可能需要:

a) 通过使用 renice 调整执行优先级(系统资源的使用)。这意味着内核会根据分配的优先级(众所周知的 “niceness”,它是一个范围从-20到19的整数)给进程分配更多或更少的系统资源。

这个值越小,执行优先级越高。普通用户(而非 root)只能调高他们所有的进程的 niceness 值(意味着更低的优先级),而 root 用户可以调高或调低任何进程的 niceness 值。

renice 命令的基本语法如下:

# renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

如果 new priority 后面的参数没有(为空),默认就是 PID。在这种情况下,PID=identifier 的进程的 niceness 值会被设置为<new priority>

b) 需要的时候中断一个进程的正常执行。这也就是通常所说的“杀死”进程。实质上,这意味着给进程发送一个信号使它恰当地结束运行并以有序的方式释放任何占用的资源。

按照下面的方式使用 kill 命令杀死进程:

# kill PID

另外,你也可以使用pkill结束指定用户(-u)、指定组(-G), 甚至有共同的父进程 ID (-P)的所有进程。这些选项后面可以使用数字或者名称表示的标识符。

# pkill [options] identifier

例如:

杀死组GID=1000的所有进程.

# pkill -G 1000

杀死PPID 是 4993的所有进程.

# pkill -P 4993

在运行pkill之前,先用pgrep测试结果、或者使用-l选项列出进程名称是一个很好的办法。它需要和pkill相同的参数、但是只会返回进程的 PID(而不会有其它操作),而pkill会杀死进程。

# pgrep -l -u gacanepa

用下面的图片说明:

LFCS 系列第十四讲: Linux 进程资源用量监控和按用户设置进程限制

总结

在这篇文章中我们探讨了一些监控资源使用的方法,以便验证 Linux 系统中重要硬件和软件组件的完整性和可用性。我们也学习了如何在特殊情况下采取恰当的措施(通过调整给定进程的执行优先级或者结束进程)。我们希望本篇中介绍的概念能对你有所帮助。

   

标签:11,0.00,IST,灵活运用,Linux,进程,41,CPU
From: https://www.cnblogs.com/mo3408/p/17382468.html

相关文章

  • Linux使用源安装nginx
    1.安装依赖包##一键安装上面四个依赖yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel2.下载并解压安装包//创建一个文件夹cd/usr/localmkdirnginxcdnginx//下载tar包wgethttp://nginx.org/download/nginx-1.21.6.tar.gztar-xvfnginx-1.21.......
  • Linux中Buffer和Cache的区别
    Linux中Buffer和Cache的区别1.cache,缓存区,是高速缓存。是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU......
  • lazarus 2.2.6+FPC 3.2.2绿色整合版 for linux aarch64
    lazarus2.2.6+FPC3.2.2绿色整合版forlinuxaarch64https://www.cnblogs.com/qiufeng2014/p/17213806.html已集成常见控件及修正了我开发遇到的Bug,这个版本包含x86_64win64交叉编译环境,有兴趣的可以下载玩玩。这个整合版的特点:一、修复代码编辑不能输入中文的Bug二、修......
  • linux LVM和磁盘配额
    目录一、LVM原理二、LVM的命令三、创建lvm过程四、扩容五、磁盘配额         一、LVM原理lvm是逻辑卷管理,可以让用户动态管理磁盘,不用考虑物理磁盘的问题,可以快速扩充磁盘大小,可以不用一个磁盘一个磁盘挂载使用,不在要求是连续的空间,将多个物理磁盘连......
  • Linux常用命令-Shell应用技巧
    Bash应用技巧命令补齐:允许用户输入文件名起始的若干个字,按Tab键补齐文件名 命令历史:history命令可以显示以前执行过的命令列表方向键↑和方向键↓可以查找以前执行过的命令 命令别名例:aliascopy=cp 表示给cp命令取个copy的别名aliasxrm='rm-f' 查看别名信息:......
  • Linux常用命令-文件处理命令
    文件处理命令ls-->显示目录下的所有文件原意:list语法:ls 选项[-ald] [文件/目录]-a:显示所有文件,包括隐藏文件-l:详细信息的显示-d:查看目录属性例:ls-l/demo cd-->切换目录/进入某个目录原意:changedirectorypwd-->显示当前所在的工作目录原意:printwo......
  • Linux常用命令-权限管理命令
    chmod-->改变文件或者目录权限原意:changethepermissionsmodeloffileu:所有者g:用户组o:其他+:加权限-:减权限=:重新赋值新权限r=4w=2x=1 语法:chmod [{ugo}{+-=}{rwx}] [文件或者目录]chmod [mode=421] [文件或目录] 例:chmodu+x/demo/hj......
  • Linux常用命令-文件搜索命令
    which-->显示系统命令所在目录语法:which[命令名称]例:whichls find-->查找文件或目录语法:find[搜索路径][搜索关键字]-name文件名*匹配任意字符init*find/etc-nameinit*?匹配单个字符init???find/etc-nameinit???-size文件大小注意:一般......
  • Linux常用命令-帮助命令
    man-->获得帮助信息语法:man[命令或配置文件]例:manls  查看ls命令的帮助信息manservices查看配置文件services的帮助信息注意:若有跟命令名称相同的配置文件,那么,默认查看的是命令的帮助man5passwd 表示查看配置文件的帮助man1passwd 表示查看命令的帮助,1可......
  • Linux源码包编译安装
    1.获取安装包地址并下载下载源代码安装包文件,以APACHE服务为例,我们需要进入https://httpd.apache.org/找到httpd的软件包。如果想要在虚拟机中下载,则复制链接地址,然后使用wget链接地址下载2.解压安装包使用tarxvf压缩包名字将压缩包解压,解压后会在同级目录下出现一个以......