标签: proc

监控总 CPU 时间的最公平方法是什么 - 每个用户?

在多用户系统上,我想以 CPU 时间的秒数来衡量每个用户的 CPU 使用率。出于此测量的目的,我假设如果 PID 属于某个用户,则该用户会导致 CPU 时间 - 即我忽略了守护程序和内核。

目前我正在这样做,每五秒钟:

  1. 获取每个用户和他们正在运行的 PID ps aux
  2. 对于每一个PID,得到x的总和,UTIME,cutime,STIME和cstime从/proc/[pid]/stat
  3. 计算t = x / interval(高负载时间隔并不总是恰好 5 秒)

如果我运行这个,我会得到合理的值。例如:这个系统上的一个用户在 python ( while True: pass) 中旋转,系统显示大约每秒 750 毫秒的 CPU 时间。当系统挂了一点时,它报告了 1600 毫秒的 1 秒 inverval。这似乎是正确的,但我不明白这些价值观可能具有欺骗性,特别是考虑到我并不真正理解它们。

所以我的问题是:

在每个用户的基础上衡量 CPU 负载的公平和正确的方法是什么?

该方法必须相当准确。该系统上可能有数百个用户,因此从中提取百分比ps aux将不够准确,特别是对于许多软件喜欢生成的短期线程。

虽然这可能很复杂,但我绝对知道这是可能的。这是我的出发点:

内核会跟踪进程的创建时间以及它在其生命周期中消耗的 CPU 时间。每个时钟滴答,内核都会更新当前进程在系统和用户模式下花费的时间,以 jiffies 为单位。—(来自Linux 文档项目

我追求的值是用户在 CPU 上花费的秒数(或 jiffies),而不是系统负载或 CPU 使用率的百分比。

在进程仍在运行时测量 CPU 时间很重要。有些进程只会持续半秒,有些会持续数月——我们需要同时捕捉这两种情况,以便我们可以细粒度地考虑用户的 CPU 时间。

cpu-load kernel proc uptime

26
推荐指数
1
解决办法
7447
查看次数

如何在单独的行中拆分“/proc/*/environ”文件?

我试图以/proc/*PID*/environ更易读的格式获取任何文件的内容。我可以按照下面显示的方式做到这一点,但我确信这不是正确的方式。

$ cat "/proc/$(pgrep gnome-session -n -U $UID)/environ"
USER=spasTEXTDOMAIN=im-configXDG_SEAT=seat0XDG_SESSION_TYPE=waylandSHLVL=1QT4_IM_MODULE=ximHOME=/home/spasDESKTOP_SESSION=ubuntuGNOME_SHELL_SESSION_MODE=ubuntuDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busIM_CONFIG_PHASE=2LOGNAME=spasGTK_IM_MODULE=ibusJOURNAL_STREAM=9:147845_=/usr/bin/gnome-sessionUSERNAME=spasXDG_SESSION_ID=70PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binXDG_RUNTIME_DIR=/run/user/1000LANG=en_US.UTF-8XDG_CURRENT_DESKTOP=ubuntu:GNOMEXDG_SESSION_DESKTOP=ubuntuXMODIFIERS=@im=ibusSHELL=/bin/bashGDMSESSION=ubuntuTEXTDOMAINDIR=/usr/share/locale/XDG_VTNR=2QT_IM_MODULE=ximPWD=/home/spasCLUTTER_IM_MODULE=ximXDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktopXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
Run Code Online (Sandbox Code Playgroud)
$ cat -e "/proc/$(pgrep gnome-session -n -U $UID)/environ"
USER=spas^@TEXTDOMAIN=im-config^@XDG_SEAT=seat0^@XDG_SESSION_TYPE=wayland^@SHLVL=1^@QT4_IM_MODULE=xim^@HOME=/home/spas^@DESKTOP_SESSION=ubuntu^@GNOME_SHELL_SESSION_MODE=ubuntu^@DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus^@IM_CONFIG_PHASE=2^@LOGNAME=spas^@GTK_IM_MODULE=ibus^@JOURNAL_STREAM=9:147845^@_=/usr/bin/gnome-session^@USERNAME=spas^@XDG_SESSION_ID=70^@PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin^@XDG_RUNTIME_DIR=/run/user/1000^@LANG=en_US.UTF-8^@XDG_CURRENT_DESKTOP=ubuntu:GNOME^@XDG_SESSION_DESKTOP=ubuntu^@XMODIFIERS=@im=ibus^@SHELL=/bin/bash^@GDMSESSION=ubuntu^@TEXTDOMAINDIR=/usr/share/locale/^@XDG_VTNR=2^@QT_IM_MODULE=xim^@PWD=/home/spas^@CLUTTER_IM_MODULE=xim^@XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop^@XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg^@
Run Code Online (Sandbox Code Playgroud)
$ cat -e "/proc/$(pgrep gnome-session -n -U $UID)/environ" | sed 's/\^@/\n/g'
USER=spas
TEXTDOMAIN=im-config
XDG_SEAT=seat0
XDG_SESSION_TYPE=wayland
...
Run Code Online (Sandbox Code Playgroud)

也许我必须为 分配一个特定的值$IFS,但它是什么?达到上述结果的正确方法是什么?

command-line bash proc

25
推荐指数
3
解决办法
1万
查看次数

如何永久更改 /proc/acpi/wakeup?

我的 Ubuntu 12.04 在暂停后立即唤醒时遇到问题。我通过更改 /proc/acpi/wakeup 中的设置解决了该问题,如以下问题中所建议:如何防止从挂起和/或休眠状态立即唤醒?.

更改设置后,系统完美进入挂起状态并保持挂起状态,但在我将其唤醒后,/proc/acpi/wakeup 中的设置与我设置的不同。

暂停前:

cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
SMB0      S4    *disabled  pci:0000:00:03.2
PBB0      S4    *disabled  pci:0000:00:09.0
HDAC      S4    *disabled  pci:0000:00:08.0
XVR0      S4    *disabled  pci:0000:00:0c.0
XVR1      S4    *disabled  
P0P5      S4    *disabled  
P0P6      S4    *disabled  pci:0000:00:15.0
GLAN      S4    *enabled   pci:0000:03:00.0
P0P7      S4    *disabled  pci:0000:00:16.0
P0P8      S4    *disabled  
P0P9      S4    *disabled  
USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *disabled  pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *disabled  pci:0000:00:06.1
PWRB      S4    *enabled   
SLPB      S4    *enabled …
Run Code Online (Sandbox Code Playgroud)

suspend proc wakeup

21
推荐指数
3
解决办法
4万
查看次数

我收到 Fsync 失败错误。为什么?

我试图更改 Ec2 实例(即 Ubuntu 12.04)中的 tcp 时间戳。我打开了编辑器并将值10. 当我尝试保存文件时,出现此错误:

/proc/sys/net/ipv4/tcp_timestamps" E667: Fsync failed
Run Code Online (Sandbox Code Playgroud)

我对 Ubuntu 很陌生。任何人都可以帮我解决这个问题吗?

12.04 proc

18
推荐指数
2
解决办法
8万
查看次数

/etc/fstab 中是否需要 /proc 挂载?

该 ZFS 指南声称:

Ubuntu 桌面安装程序可能会在文件中添加devprocsystmp/etc/fstab,但这些条目对于现代系统并不是绝对必要的。如果需要,请立即添加它们。

这有多真实?我的 Ubuntu 12.04 安装包含显式/proc挂载。如果没有必要,为什么 Ubuntu 包含它?

configuration fstab proc

10
推荐指数
1
解决办法
7771
查看次数

异常大的 /proc/kcore 文件——这是什么意思?

我不得不中止我的系统备份,因为它在文件上停滞不前/proc/kcore。我检查了它的大小,嗯,文件很大。检查谷歌,似乎许多其他人也有大得离谱的 kcore 文件。

我有三个问题:

  1. 我应该关心 kcore 的大小吗?
  2. 如果是这样,我怎样才能减小它的大小?
  3. 有什么理由备份 /proc/ 目录吗?

backup proc

9
推荐指数
1
解决办法
4349
查看次数

如何永久增加 entropy_avail 级别?

自从我买了我的新电脑并安装了 Ubuntu 11.10 以来,我注意到了键盘/鼠标挂起和其他问题。

我研究了增加 /proc/sys/kernel/random/entropy_avail 在哪里有帮助并且确实如此。

目前我通过$ ls -R /在终端中运行来做到这一点 。当然,这只是读取目录和文件。

事实上,它确实将其提高到 4000 多。然后它回落到 300 和 400。

在寻找并尝试找到解决方案后,如何在不从终端手动 LSing 硬盘的情况下增加 entrophy_avail?

我必须承认,我从 8.04 开始就一直在全职使用 Ubuntu,从 Natty 开始就完全免费使用 Windows。我不太了解这个 entropy_avail 但我的计算机在高峰使用率很高时似乎做得更好。

proc

8
推荐指数
3
解决办法
2万
查看次数

断电后自动重启

我想要一台断电的机器在有电时自动重启。我环顾四周,没有找到适用于 11.04 的解决方案。

据称在某一时刻你可以这样做:

echo 'server_mode=1' > /proc/pmu/options

但是,我的安装没有 /proc/pmu 文件夹。我认为这仍然是可能的,设置在哪里可用?

编辑:

如果这在操作系统中是不可能的,有没有办法将这些类型的更改脚本化到 BIOS 或者这是否需要在启动时物理访问机器以手动编辑设置?

reboot power-management proc

7
推荐指数
1
解决办法
3万
查看次数

无法理解和映射 /proc/net/tcp 的输出

我的 ubuntu 12.10 上的 /proc/net/tcp 输出如下:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 0100007F:0CEA 00000000:0000 0A 00000000:00000000 00:00000000 00000000   115        0 14759 **1 0000000000000000 100 0 0 10 -1** 
Run Code Online (Sandbox Code Playgroud)

所以我们可以看到显示的数据列的数量比列的名称多。所以如果我看到最后,我可以找到以下内容:

uid ->115

timeout->0

inode->14759

有人可以告诉 inode 列之后的值是什么,即 1 0000000000000000 100 0 0 10 -1

networking 12.04 proc

7
推荐指数
1
解决办法
7688
查看次数

如何检查系统中是否启用了 ICMP 阻塞..?

新启用的 VLAN 池未 ping 设备。连接问题不存在。

  • 这是因为如果启用了 ICMP 阻止吗?
  • 如何检查相同的状态?

command-line ping proc terminal-server tcp-ip

7
推荐指数
1
解决办法
3万
查看次数