我已经使用脚本来监视和提取日志文件中的数据多年,从不质疑大多数人认为理所当然的基本工具集。特别是 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
答案 0 :(得分:0)
awk / grep命令都以只读模式读取日志文件,因此不会因为应用程序(写入模式)和awk / grep程序同时访问而导致日志文件损坏而受到影响(读取 - 只有模式)。
awk / grep程序肯定存在CPU,内存使用量,这会影响应用程序写入日志文件。此影响类似于使用系统资源的任何其他进程。 grep / awk命令也不例外。根据grep / awk脚本的功能,它们会占用大量的CPU / RAM。任何语言编写错误的代码都可能导致问题。正如评论中所建议的那样,限制监控流程是件好事。 ulimit
和cgroups
是可用于约束资源的选项。其他好的选择是使用timeout
,如果花费的时间超过了预期的时间,就会杀死脚本。