我正在尝试从使用 htop 切换到 top,因为我多次使用过没有 htop 的服务器。
当我第一次输入时top
,内存使用情况以 MiB 为单位显示:
然后我喜欢将其切换到 GiB,E
这样数字读起来更舒服:
最后我使用以下命令切换内存栏m
:
但在这最后一步之后,我看到了数字 61,8/15,2。对我来说,15.2 显然是可用 RAM,但 61,8 的含义是什么?在这种格式下,我期望已使用的内存位于栏的这一侧,但这显然不是。
我想要运行一个产生子进程的过程,例如,
for i in {1..4}; do
sh -c 'echo $$; for j in {1..3}; do
sh -c "echo ...\$\$; sleep 1"
done'
done
并且我想每 2 秒用 监控一次 CPU 和内存使用情况top
。
top -p <PID>
,但这并没有考虑到孩子的情况。top
正在运行的进程,但是信息太多了。top
,但该过程可能会产生新的子进程,这是无法解释的。我如何才能top
每 2 秒获取一次我正在运行的进程及其产生的任何进程的快照?
有人在这里问过类似的问题,但它是关于在流程结束后将这些信息汇总为一个数字。我的问题是关于在流程仍在进行时持续监控流程。
我使用top时,内存数据在概览区显示如下:
KiB Mem : 16092836 total, 143168 free, 11005184 used, 4944484 buff/cache
然后我使用m(交互命令)来切换内存数据显示模式:
KiB Mem : 88.7/16092836 [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ]
我的问题是: 的结果100*used/total
是68.3856
,是如何88.7
计算的?
最近我注意到我的电脑变热了,风扇比以往任何时候都响亮,电池寿命更短,所以我top
想看看 cpu 和 ram 的使用情况,我注意到两个进程几乎消耗了我所有的 cpu 功率
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4823 user+ 20 0 361960 22132 17448 R 99,3 0,3 0:03.30 tracker-store
1579 user+ 39 19 759660 177600 18736 R 99,0 2,4 24:55.20 tracker-miner-f
我也htop
一直在旁边,在任何给定时间,我的 8 核 cpu 中有两个或更多充分利用的核心,所有这些都发生在我启动系统之后,并且我没有在启动时启用任何服务(ssh,蓝牙,...ETC)
这些过程是什么,有什么方法可以阻止它们
我正在尝试使用以下 top 命令获取内存使用情况。
KiB Mem : 8009480 total, 1438848 free, 1964392 used, 4606240 buff/cache
KiB Swap: 7340028 total, 5302364 free, 2037664 used. 5202692 avail Mem
top -p $PID -n 1 -b | grep 'KiB Mem :' | awk -F, '{print $3}'
1963780 used
奇怪的是,有时我收到的输出为
*"15108960+used"*
我无法理解为什么有时会出现+
,*
符号。
我在手册页中找不到任何关于它的内容。
这意味着什么?如何在没有和输出的情况下进行top
命令打印。*
+
注意:在 CentOs 机器上运行。
我正在尝试top
使用-p
选项和xargs
. 但是,top
无法运行并出现错误top: failed tty get
:
$ pgrep gvfs | paste -s -d ',' | xargs -t top -p
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
top: failed tty get
我使用-t
选项xargs
来查看即将执行的完整命令。看起来不错,我可以手动成功运行它:
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
但是,它不与xargs
. 这是为什么?
当我执行ps -efT
(where -T
= Show threads, possibly with SPID column.
) 时,我看到所有线程都具有相同的 PID,这与预期的一样。
myroot 24958 24958 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24959 7942 0 20:20 pts/12 00:00:11 java -jar myapp.jar
myroot 24958 24960 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24961 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24962 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24963 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24964 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24965 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
如上所示,所有线程共享/显示相同的 PID 24958
。
现在,当我对top或htop执行相同操作时,我看到每个线程的 pid 不同,这让我很困扰。有没有办法为所有线程显示相同的 PID。下面是缩减后的输出top -H -p 24958
(我将 top 与 -p 一起使用,所以我可以解释并显示问题)
top - 21:42:44 up 9 days, 18:38, 0 users, load average: 0.00, 0.26, 0.82
Threads: 32 total, 0 running, 32 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 12542.5 total, 10135.3 free, 826.8 used, 1580.4 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 11439.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24958 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.00 java
24959 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:11.99 java
24960 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.43 GC Thread#0
24961 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.00 G1 Main Marker
24962 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.00 G1 Conc#0
--and few more threads.
当我使用时top -H
,除非我看到所有线程都具有相同的 PID,否则我无法说出所有线程属于同一进程。
关于如何在使用 top(或 htop。正如我所观察到的那样,htop 也有同样的问题)时为所有线程获得相同 PID 的任何指南。
给定@user1686 使用 TGID 列的答案。我想知道线程的 PID 指的是什么。
top
由于我是 Linux 新手,所以一直在查看命令,但我看不到与显示信息的排序方式有关的任何相关性。任何人都可以对此有所了解吗?
我正在尝试使用 Linux top 命令监视进程的 CPU、RAM 和计算时间,以及它生成的所有子进程。
我发现我可以使用以下语法存储 top 命令的输出:
$ top -b > top.txt
然后我用 python 脚本解析结果。但是我无法识别我正在监视的特定进程及其子进程。
我发现我可以通过在 top 运行时键入来在 top 中添加 PPIDs 字段,但这在带有该选项f
的批处理模式下不起作用。-b
有没有办法显示 PPID 并存储 top 命令的输出,以便在解析结果时找到我感兴趣的进程?
我的具体问题是关于在批处理模式下使用 top 时在输出文件中包含 PPID。如果您有更好的建议来监控进程的 CPU、RAM 和计算时间,也将受到欢迎。