【发布时间】:2016-11-30 11:55:05
【问题描述】:
多年来,我一直使用脚本监控日志文件并从日志文件中提取数据,并且从未质疑过大多数人认为理所当然的基本工具集。特别是 grep 和 awk 几乎被社区中的每个人使用。
我发现了当前的 grep 错误(有些可以追溯到几年前): http://savannah.gnu.org/bugs/?group=grep
来自 GNU grep 2.6.3 的手册页:
已知错误
{n,m} 构造中的大量重复计数可能会导致 grep 使用大量内存。此外,某些其他晦涩的正则表达式需要指数级的时间和空间,并可能导致 grep 耗尽内存。
反向引用非常慢,可能需要指数级时间。
还有 GNU Awk 3.1.7 的手册页:
错误
鉴于命令行变量分配功能,不需要 -F 选项;它只是为了向后兼容而保留。
语法上无效的单字符程序往往会溢出解析堆栈,从而产生相当无用的消息。在完全一般的情况下,此类程序非常难以诊断,而且这样做的努力确实不值得。
我对例如限制感兴趣
- 使用复杂的正则表达式时,
- 未旋转的超大文件,
- 每百分之一秒写入数千次的日志
是否只是监视脚本的内存使用情况以确保它没有使用大量内存?
为可能需要很长时间执行的脚本实现超时功能是否是一种好习惯?
人们在使用这些工具构建解决方案时还使用其他良好的标准和结构吗?
我找到了对等价的 findstr 非常有用的答案,可以让我更好地理解 Windows 环境中的脚本: What are the undocumented features and limitations of the Windows FINDSTR command?
【问题讨论】:
-
我会使用
ulimit来约束监控脚本(内存、CPU 时间...)。你考虑过这个选项吗?