假设我想在一夜之间监控Java进程的内存使用情况。
我可以做类似的事情
顶部| grep java> out.log
我会得到一大堆线的日志文件。
有没有简单的方法来获得插入每行前面的数据/时间?
不要重新发明轮子。 使用logging器(1)将消息写入系统日志,在几乎所有Unix风格上都支持该logging器 。 系统日志会照顾你的时间戳。 您的日志数据将被存储到系统日志,如/var/log/messages (这是可configuration的)。 以后不用担心清理日志文件(尤其是如果这个作业永远运行),因为系统日志是由logrotate / newsyslog自动旋转的。
top | grep java | logger -t java_cpuhog
或者,如果你真的想把它写到你自己的文件中。 但是之后你需要清理文件:
top | grep java | logger -t java_cpuhog -f /var/log/java-top.log
... | awk -f timetag.awk > ...
timetag.awk:
{ print "[" strftime() "] " $0 }
在shell中: top | grep java | while read LINE ; do date "+%F %T ${LINE}" ; done top | grep java | while read LINE ; do date "+%F %T ${LINE}" ; done
你可以创build像stamp含有的东西
#!/usr/bin/perl -p s/^/localtime()." "/e;
然后运行
top -b | grep java | stamp > out.log
如果您不交互使用,请不要忘记使用top -b 。 当然,顶层已经在每次运行时都会加上一个时间戳。 如果你不一定每行都需要date,那么只需要使用top就可以了,因为它在每次迭代中都加上一个时间戳。 我有时候用这个来获得10秒的样本,整整一天后再回顾一下:
top -b -d 10 -c -n 8640