假设我想在一夜之间监控一个 Java 进程的内存使用情况。
我可以做类似的事情
顶部 | grep java > out.log
我将得到一个包含很多行内容的日志文件。
有没有简单的方法可以在每行前面插入数据/时间?
答案1
不要重新发明轮子。使用以下命令将消息写入系统日志:记录器(1),几乎所有 Unix 版本都支持它。Syslog 将为您处理时间戳。您的日志数据将存储到系统日志中,例如/var/log/messages
(这是可配置的)。您无需担心稍后清理日志文件(特别是如果此作业永远运行),因为系统日志由 logrotate/newsyslog 自动轮换。
top | grep java | logger -t java_cpuhog
或者,如果你确实想将其写入你自己的文件。但之后你需要清理文件:
top | grep java | logger -t java_cpuhog -f /var/log/java-top.log
答案2
... | awk -f timetag.awk > ...
时间标签.awk:
{
print "[" strftime() "] " $0
}
答案3
在 shell 中: top | grep java | while read LINE ; do date "+%F %T ${LINE}" ; done
答案4
您可以创建类似stamp
包含
#!/usr/bin/perl -p
s/^/localtime()." "/e;
然后运行
top -b | grep java | stamp > out.log
如果您不是以交互方式使用它,请不要忘记使用top -b
。当然,top 每次运行时都会添加一个时间戳。如果您不一定需要每行上的日期,只需单独使用 top 即可,因为它会在每次迭代上添加一个时间戳。我有时会使用它来获取一整天的 10 秒样本,以便稍后查看:
top -b -d 10 -c -n 8640