用于获取linux机器cpu使用率,linux cpu 频率

  用于获取linux机器cpu使用率,linux cpu 频率

  上一篇文章主要介绍了c组的基本概念,包括CentOS系统的缺省设置和控制工具,并以中央处理器为例介绍了c组如何控制资源。本文提供了如何使用c组来限制中央处理器的使用,以及各种c组设置对性能的影响的具体示例linux操作系统.

  1 .显示当前c组信息

  有两种方法可以查看系统的当前c组信息。第一种方法是使用系统d-cgls命令显示。这将返回到整个系统的c组级别,c组树的顶层由薄片组成。以下表示。巴斯h

  $ systemd-cgls -无页面

  1/usr/lib/systemd/systemd-switched-root-system-deserialize 22

  用户。切片

  () )用户-1000 .切片

  (()会话-11 .范围

  ((9507 sshd : Tom [ priv ])

  ()9509sshd:Tom@pts/3

  (()9510-bash

  ()用户0 .切片

  ()会话-1 .范围

  ())6239 sshd: root@pts/0

  ())6241 -zsh

  ()11537systemd-cgls -无页

  (系统。切片

  rsyslog.service

  ()5831 /usr/symdzh/rsyslogd -n

  sshd.service

  ()5828 /usr/symdzh/sshd -D

  tuned.service

  (()5827/usr/ymdzh/python 2-es/usr/symdzh/tuned-l-p

  crond.service

  ()5546 /usr/symdzh/crond -n

  复制代码

  请注意,系统c组级别的顶级由用户。切片和系统。切片组成。系统中没有虚拟机和容器正在运行,因此没有机器。切片。因此,如果中央处理器忙,用户。切片和系统。切片将分别获得50%的中央处理器使用时间。会话

  在用户。切片下有用户-1000 .切片和用户0 .切片这两个子切片,因为每个子薄片都有用户ID (UID),所以哪个薄片对哪个用户例如,根据上面的输出信息,可以看到用户-1000 .切片属于用户汤姆,而用户0 .切片属于用户根。嘘

  系统d-cgls命令提供c组级别的静态信息快照。要查看c组级别的动态信息,可以使用systemd-cgtop命令进行查看。工具

  $ systemd-cgtop

  路径任务% cpumemoryinput/s output/s

  /161 1.2 161.0米- -

  /system.slice - 0.1 - - -

  /系统。slice/vmtoolsd。服务10.1-

  /系统。切片/调谐。服务10.0 -

  /系统。切片/r系统日志。服务10.0-

  /系统。切片/审计。服务1 -

  /系统。切片/记录码。服务1 -

  /system.slice/crond.service1 - -

  /system.slice/dbus.service1 - -

  /system.slice/GSS代理服务器。服务1 - -

  /系统。切片/左心室m2-左心室metad。服务1 -

  /系统。切片/网络。服务1 -

  /系统。切片/pol套件。服务1 -

  /系统。slice/rpcymdzhd。服务1 -

  /system.slice/sshd.service1 - -

  /系统。切片/系统-Getty。slice/Getty @ tty 1 .服务1 - -

  /系统。切片/系统

  md-journald.service 1 - - - -

  /系统。slice/systemd-logind。服务1 -

  /系统。slice/systemd-udevd。服务1 -

  /系统。切片/VG授权。服务1 -

  /user.slice 3 - - - -

  /用户。切片/用户-0。切片/会话-1。范围3 -

  /用户。切片/用户-1000。切片3 -

  /用户。切片/用户-1000。切片/会话-11。范围3 -

  /用户。切片/用户-1001。切片/会话-8。范围3 -

  复制代码

  systemd-cgtop提供的统计数据和控制选项与顶端命令相似,但该命令只显示那些开启了资源统计功能的服务和切片。好比:若是你想开启sshd.service的资源统计功能,能够进行以下操做:发布

  $ system CTL set-property sshd。服务CPU核算=真实内存核算=真实

  复制代码

  该命令会在/etc/systemd/system/sshd。服务。d/目录下建立相应的配置文件:性能

  $ ll/etc/systemd/system/sshd。服务。d/

  总用量8

  4 -rw-r - r - 1根根28 5月31 02:24 50-CPUAccounting.conf

  4 -rw-r - r - 1根根31 5月31 02:24 50内存会计。主配置文件

  $ cat/etc/systemd/system/sshd。服务。d/50-CPU会计。主配置文件

  [服务]

  CPUAccounting=是

  $ cat/etc/systemd/system/sshd。服务。d/50-内存会计。主配置文件

  [服务]

  内存会计=是

  复制代码

  配置完成以后,再重启混合硬盘服务:学习

  $ systemctl守护程序-重新加载

  $ systemctl重新启动混合硬盘

  复制代码

  这时再从新运行systemd-cgtop命令,就能看到混合硬盘的资源使用统计了:测试

  开启资源使用统计功能可能会增加系统的负载。由于资源统计也会消耗CPU和内存,因此在大多数情况下使用top命令进行检查就足够了。当然是Linux系统。你可以控制一切,你可以为所欲为。

  2.分配CPU相对使用时间

  经过上一篇文章的学习,我们知道CPU份额可以用来设置CPU的相对使用时间。接下来,我们通过实践来验证一下。

  以下实验都是在单核CPU系统上进行的。多核和单核的情况完全不同,所以在本文的最后会单独讨论。

  测试对象是一个服务和两个普通用户,其中用户tom的UID是1000,可以通过以下命令查看:

  $ cat /etc/passwdgrep tom

  汤姆:x:1000:1000:/home/汤姆:/ymdzh/bash

  复制代码

  设置foo.service:

  $ cat/etc/systemd/system/foo . service

  [单位]

  Description=没有任何用处的foo服务

  after=remote-fs . target NSS-lookup . target

  [服务]

  ExecStart=/usr/ymdzh/sha1 sum/dev/zero

  ExecStop=/ymdzh/kill-WINCH $ { main PID }

  [安装]

  WantedBy=多用户.目标

  复制代码

  /dev/zero是linux系统中一个特殊的设备文件。无私巾读的时候会提供无限的空字符,所以foo.service会不断消耗CPU资源。现在让我们将foo.service的CPU份额更改为2048:

  $ mkdir/etc/systemd/system/foo . service . d

  $ cat EOF/etc/systemd/system/foo . service . d/50-cpushares . conf

  [服务]

  CPUShares=2048

  文件结束

  复制代码

  因为系统默认的CPU份额值是1024,当设置为2048时,foo.service会在CPU忙的时候尽力获取system.slice的所有CPU使用时间。

  现在通过systemctl start foo.service启动foo服务,并使用top命令检查CPU使用情况:

  目前没有其他进程在消耗CPU,所以foo.service几乎可以使用100%的CPU。

  现在让我们让用户tom参与进来,首先将user-1000.slice的CPU份额设置为256:

  $ system CTL set-property user-1000 . slice CPU shares=256

  复制代码

  使用用户tom登录系统,然后执行命令sha1sum /dev/zero再次检查CPU使用情况:

  你现在是不是感觉有点迷茫?Foo.service的CPU份额是2048,而用户tom的CPU份额只有256。用户tom不是应该只能使用10%的CPU吗?回想一下,我在上一节中提到,当CPU繁忙时,user.slice和system.slice将分别获得50%的CPU使用时间。这只是这里的场景,只有user.slice下的sha1sum进程繁忙,所以它将获得50%的CPU使用时间。

  最后让用户jack参与,他的CPU份额是默认值1024。使用用户jack登录系统,然后执行命令sha1sum /dev/zero再次检查CPU使用情况:

  如上所述,在这个场景中,user.slice和system.slice将分别获得50%的CPU使用时间。用户tom的CPU份额是256,而用户jack的CPU份额是1024,所以用户jack的CPU使用时间是用户tom的4倍。

  3.分配CPU的绝对使用时间

  前面提到过,如果要严格控制CPU资源,就要设置CPU资源的使用限制,即无论CPU是否繁忙,CPU资源的使用都不能超过这个限制,可以通过CPUQuota参数来设置。让我们将用户tom的CPU配额设置为5%:

  $ system CTL set-property user-1000 . slice CPU quota=5%

  复制代码

  这时你会看到用户tom的sha1sum进程只能获得5%左右的CPU使用时间。

  如果此时停止foo.service,关闭用户jack的sha1sum进程,会看到用户tom的sha1sum进程只能获得5%左右的CPU使用时间。

  如果某个非核心服务消耗了CPU资源,可以用这个方法严格限制它对CPU资源的使用,防止它影响系统中的其他重要服务。

  4.动态设置cgroup

  所有与cgroup相关的操作都基于内核中的cgroup虚拟文件系统。使用cgroup非常简单,只需挂载这个文件系统。默认情况下,系统安装在/sys/fs/cgroup目录中。当服务启动时,它的cgroup将被挂载到该目录下的子目录中。以foo.service为例:

  先进入system.slice的CPU子系统:

  $ cd /sys/fs/cgroup/cpu,cpuacct/system.slice

  复制代码

  检查foo.service的cgroup目录:

  $ ls foo。*

  zsh:没有找到匹配:foo。*

  复制代码

  因为没有启动foo.service,所以没有挂载cgroup目录。现在启动foo.service并再次检查它的cgroup目录:

  $ ls foo.serice

  c group . clone _ children c group . procs CPU acct . usage CPU . CFS _ period _ us CPU . rt _ period _ us CPU . shares notify _ on _ release

  c group . event _ control cpuacct . stat cpuacct . usage _ percpu CPU . CFS _ quota _ us CPU . rt _ runtime _ us CPU . stat任务

  复制代码

  您还可以查看其PID和CPU份额:

  $卡特彼勒foo.service/tasks

  20225

  $卡特彼勒foo.service/cpu.shares

  2048

  复制代码

  理论上,我们可以在/sys/fs/cgroup目录中动态地更改cgroup的配置,但我不建议您在生产环境中这样做。如果想通过实验深入了解cgroup,可以折腾一下这个目录。

  5.如果是多核CPU呢?

  以上实验都是在单核CPU上进行的。我们先简单讨论一下多核的场景,以两个CPU为例。

  首先说一下CPU份额。只能为单核CPU设置份额,即无论你的份额值有多大,cgroup最多只能获得100%的CPU使用时间(即1核CPU)。仍然使用本文第2节中的示例,将foo.service的CPU份额设置为2048,并启动foo.service。此时,您将看到foo.service仅获得100%的CPU使用时间,但没有完全使用两个CPU核心:

  然后使用用户tom登录系统并执行命令sha1sum /dev/zero。你会发现用户tom的sha1sum进程和foo.service各使用一个CPU核:

  再来说说CPUQuota,在这最后一篇文章的最后已经提到了。如果一个cgroup想完全使用两个CPU核,可以通过CPUQuota参数设置。例如:

  $ system CTL set-property foo . service CPU quota=200%

  复制代码

  至于工艺最后能不能完全用两个CPU核,就看自己的设计支持了。

  6.摘要

  本文通过具体的例子来观察不同的cgroup设置对性能的影响。下一篇文章将演示如何通过cgroup限制内存使用。

用于获取linux机器cpu使用率,linux cpu 频率