如何将 top 命令的输出重定向到文件中

6

为了监控系统,我需要将top命令的输出重定向到文件中以便使用/解析。 我正在尝试做同样的事情,但CPU性能统计数据没有保存在文件中,请参见截图。 期望输出:

[root@v100 /usr/local/bin]# top
last pid:  6959;  load averages:  0.01,  0.03,  0.03                                                                                   up 0+02:47:34  17:51:16
114 processes: 1 running, 108 sleeping, 5 zombie
CPU:  0.0% user,  0.0% nice,  1.6% system,  0.0% interrupt, 98.4% idle
Mem: 734M Active, 515M Inact, 226M Wired, 212M Buf, 491M Free
Swap: 4095M Total, 4095M Free

 PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
 1953 root      150  20    0  3084M   635M uwait    2:44  0.00% java
 1663 mysql      46  20    0   400M   139M sbwait   1:29  0.00% mysqld
 1354 root       31  20    0 94020K 50796K uwait    0:24  0.00% beam
 4233 root        1  20    0   122M 23940K select   0:06  0.00% python
 1700 zabbix      1  20    0 20096K  2436K nanslp   0:03  0.00% zabbix_agentd
 1799 zabbix      1  20    0   103M  7240K nanslp   0:02  0.00% zabbix_server
 4222 root        1  30    0   122M 23300K select   0:02  0.00% python
 1696 zabbix      1  20    0 19968K  2424K nanslp   0:02  0.00% zabbix_agentd
 2853 root        1  20    0   126M 29780K select   0:02  0.00% python
 1793 zabbix      1  20    0   103M  7152K nanslp   0:01  0.00% zabbix_server
 1797 zabbix      1  20    0   103M  8348K nanslp   0:01  0.00% zabbix_server
 1752 root        1  20    0   122M 22344K select   0:01  0.00% python
 1796 zabbix      1  20    0   103M  8136K nanslp   0:01  0.00% zabbix_server
 1795 zabbix      1  20    0   103M  8208K nanslp   0:01  0.00% zabbix_server
 1801 zabbix      1  20    0   103M  7100K nanslp   0:01  0.00% zabbix_server
 3392 root        1  20    0   122M 23392K select   0:01  0.00% python
 1798 zabbix      1  20    0   103M  7860K nanslp   0:01  0.00% zabbix_server
 2812 root        1  20    0   134M 25184K select   0:01  0.00% python
 1791 zabbix      1  20    0   103M  7188K nanslp   0:01  0.00% zabbix_server
 1827 root        1 -52   r0 14368K  1400K nanslp   0:01  0.00% watchdogd
 1790 zabbix      1  20    0   103M  7164K nanslp   0:01  0.00% zabbix_server
 1778 zabbix      1  20    0   103M  8608K nanslp   0:01  0.00% zabbix_server
 1780 zabbix      1  20    0   103M  8608K nanslp   0:01  0.00% zabbix_server
 2928 root        1  20    0   122M 23272K select   0:01  0.00% python
 2960 root        1  20    0   116M 22288K select   0:01  0.00% python
 1776 zabbix      1  20    0   103M  7248K nanslp   0:01  0.00% zabbix_server
 2892 root        1  20    0   122M 22648K select   0:01  0.00% python
 1789 zabbix      1  20    0   103M  7128K nanslp   0:01  0.00% zabbix_server
 1814 root        1  20    0   216M 15796K select   0:01  0.00% httpd
 1779 zabbix      1  20    0   103M  8608K nanslp   0:01  0.00% zabbix_server
 1783 zabbix      1  20    0   103M  8608K nanslp   0:01  0.00% zabbix_server
 1800 zabbix      1  20    0   103M  7124K nanslp   0:01  0.00% zabbix_server
 1782 zabbix      1  20    0   103M  8608K nanslp   0:01  0.00% zabbix_server
 1781 zabbix      1  20    0   103M  8608K nanslp   0:00  0.00% zabbix_server
 1792 zabbix      1  20    0   103M  7172K nanslp   0:00  0.00% zabbix_server
 2259 root        2  20    0 48088K  4112K uwait    0:00  0.00% cb_heuristics

如果我执行以下操作:
[root@v100 /usr/local/bin]# top > /tmp/top.output

然后它显示:
[root@v100 /usr/local/bin]# cat /tmp/top.output

 last pid:  7080;  load averages:  0.09,  0.06,  0.03  up 0+02:52:24    17:56:06
 114 processes: 1 running, 108 sleeping, 5 zombie

 Mem: 731M Active, 515M Inact, 219M Wired, 212M Buf, 501M Free
 Swap: 4095M Total, 4095M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
  1953 root      150  20    0  3084M   633M uwait    2:17  0.00% java
  1663 mysql      46  20    0   400M   136M sbwait   1:08  0.00% mysqld
  1354 root       31  20    0 94020K 49924K uwait    0:18  0.00% beam
  4233 root        1  20    0   122M 23776K select   0:04  0.00% python
  1700 zabbix      1  20    0 20096K  2436K nanslp   0:02  0.00% zabbix_agentd
  1799 zabbix      1  20    0   103M  7240K nanslp   0:01  0.00% zabbix_server
  2853 root        1  20    0   126M 29780K select   0:01  0.00% python
  1696 zabbix      1  20    0 19968K  2424K nanslp   0:01  0.00% zabbix_agentd
  4222 root        1  28    0   122M 23264K select   0:01  0.00% python
  1793 zabbix      1  20    0   103M  7152K nanslp   0:01  0.00% zabbix_server
  1752 root        1  20    0   122M 22344K select   0:01  0.00% python
  1797 zabbix      1  20    0   103M  8088K nanslp   0:01  0.00% zabbix_server
  1796 zabbix      1  20    0   103M  7944K nanslp   0:01  0.00% zabbix_server
  1795 zabbix      1  20    0   103M  8044K nanslp   0:01  0.00% zabbix_server
  1801 zabbix      1  20    0   103M  7100K nanslp   0:01  0.00% zabbix_server
  3392 root        1  20    0   122M 23312K select   0:01  0.00% python
  2812 root        1  20    0   134M 25184K select   0:01  0.00% python
  1798 zabbix      1  20    0   103M  7628K nanslp   0:01  0.00% zabbix_server

所以,在这里,我能够监控内存但不能监控CPU,原因是在重定向top命令输出时,CPU统计信息没有更新。

我该如何捕获CPU统计信息呢?

如果您有任何建议,请告诉我。

1个回答

11

top -b -n 1 看起来在我的 Linux 系统上运行正常(-b:批处理模式操作,-n:迭代次数)。

编辑:

我刚刚在 FreeBSD 9.2 上尝试了它,该系统使用 top3.5beta12 版本。似乎需要至少一个额外的迭代来获取 CPU 统计信息。因此,您可能需要使用以下命令:

top -b -d2 -s1 | sed -e '1,/USERNAME/d' | sed -e '1,/^$/d'
-b: 批处理模式,-d2: 显示两个窗口(第一个不含CPU状态,第二个包含),-s1: 显示间隔为1秒。 sed管道删除了第一个不包含CPU状态的显示(通过跳过标题和进程列表)。

感谢您的回复,我已经尝试了,但仍然没有显示CPU统计信息, 请看输出:[root@v100 /usr/local/bin]# top -b -n 1 > /tmp/top.output[root@v100 /usr/local/bin]# cat /tmp/top.output最后一个pid: 9094; 平均负载: 0.04, 0.07, 0.06, 运行时间: 0+04:31:20 19:35:02 114个进程:1个正在运行,108个睡眠,5个僵尸 内存:735M活动,514M不活动,232M有线,212M缓存,483M空闲交换:4095M总共,4095M空闲 PID 用户名 THR PRI NICE SIZE RES 状态 时间 WCPU 命令 1953 root 150 20 0 3084M 635M uwait 3:07 0.00% java - v-jay
似乎有不同的top实现,请参见http://english.turkcebilgi.com/top+%28Unix%29部分历史记录。对我来说,`top -v显示procps-ng version 3.3.3。 您可能需要考虑替代来源,如vmstat命令或proc文件系统的/proc/stat(请参见http://www.linuxhowtos.org/System/procstat.htm以了解输出的说明)。 (如果您的top/proc`获取信息,这也不足为奇。) - halfbit
root@v50:/usr/local/apache-tomcat-6.0.33 # top -v 显示 top: version 3.5beta12。在我的FreeBsd系统中,文件/proc/stat不存在。 - v-jay
#top -b -d2 -s1 | sed -e '1,/USERNAME/d' | sed -e '1,/^$/d' > /tmp/top.out 对我来说是有效的。 非常感谢。 - v-jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接