我有一个拉链(. gz)日志文件logfile.20221227.gz。我正在编写一个python脚本来处理它。我用一个100行的文件进行了测试,脚本运行正常。当我在几乎5GB的实际日志文件上运行相同的脚本时,脚本被破坏了。请注意,我能够处理高达2GB的日志文件。不幸的是,唯一比这更重的日志文件是5GB +或者7GB+,脚本对这两个都失败了。我的代码如下。
count = 0
toomany = 0
maxhits = 5000
logfile = '/foo/bar/logfile.20221228.gz'
with gzip.open(logfile, 'rt', encoding='utf-8') as page:
for line in page:
count += 1
print("\nFor loop count is: ",count)
string = line.split(' ', 5)
if len(string) < 5:
continue
level = string[3]
shortline = line[0:499]
if level == 'FATAL':
log_lines.append(shortline)
total_fatal += 1
elif level == 'ERROR':
log_lines.append(shortline)
total_error += 1
elif level == 'WARN':
log_lines.append(shortline)
total_warn += 1
if not toomany and (total_fatal + total_error + total_warn) > max_hits:
toomany = 1
if len(log_lines) > 0:
send_report(total_fatal, total_error, total_warn, toomany, log_lines, max_hits)
输出:
For loop count is: 1
.
.
For loop count is: 192227123
Killed
Killed
在这里是什么意思?它没有提供太多的调查只是这一个关键字。还有是有限制的文件大小,有没有办法绕过它。
谢谢你。
1条答案
按热度按时间kpbwa7wx1#
从更新的代码来看,它可能是memory problem,因为
log_lines
太大了尝试将
shortline
写入临时文件而不是log_lines.append
,然后最后通过电子邮件发送文件(或其内容)。但首先要检查文件的大小,因为通过电子邮件发送可能会太大,然后可以尝试压缩它,也可以直接将临时文件写成gz: