在日志文件上使用grep / awk运行脚本是否会影响Application写入日志文件?

时间:2016-07-26 17:41:29

标签: awk scripting grep

我已经使用脚本来监视和提取日志文件中的数据多年,从不质疑大多数人认为理所当然的基本工具集。特别是 grep awk 几乎被社区中的每个人使用。

我发现当前的grep错误(有些回溯几年): DirectX Tool Kit for DirectX 11

从GNU grep 2.6.3的手册页:

  

已知错误

     

{n,m}结构中的大量重复计数可能会导致grep使用大量内存。此外,某些其他模糊的正则表达式需要指数时间和空间,并可能导致grep耗尽内存。

     

反向引用非常慢,可能需要指数时间。

GNU Awk 3.1.7的手册页:

  

BUGS

     

给定命令行变量赋值功能,不需要-F选项;它只是为了向后兼容。

     

语法无效的单个字符程序往往会溢出解析堆栈,从而产生相当无用的消息。在完全一般的情况下,这样的程序难以诊断,并且这样做的努力确实不值得。

我对例如

的限制感兴趣
  • 使用复杂的正则表达式时,
  • 非旋转的超大文件,
  • 每百分之一秒写入数千次的日志

是否只是监控脚本的内存使用情况以确保它没有使用大量内存?

为可能需要很长时间才能执行的脚本实现超时功能是不错的做法?

在使用这些工具构建解决方案时,人们是否还会使用其他良好的标准和结构?

我找到了等效的findstr非常有用的答案,让我更好地理解Windows环境中的脚本: http://savannah.gnu.org/bugs/?group=grep

1 个答案:

答案 0 :(得分:0)

awk / grep命令都以只读模式读取日志文件,因此不会因为应用程序(写入模式)和awk / grep程序同时访问而导致日志文件损坏而受到影响(读取 - 只有模式)。

awk / grep程序肯定存在CPU,内存使用量,这会影响应用程序写入日志文件。此影响类似于使用系统资源的任何其他进程。 grep / awk命令也不例外。根据grep / awk脚本的功能,它们会占用大量的CPU / RAM。任何语言编写错误的代码都可能导致问题。正如评论中所建议的那样,限制监控流程是件好事。 ulimitcgroups是可用于约束资源的选项。其他好的选择是使用timeout,如果花费的时间超过了预期的时间,就会杀死脚本。

相关问题