Linux 根据关键字查看大文件日志,grep: memory exhausted

2021-01-13 16:59:13 +08:00
 wuzhizuiguo
日志文件 10G,原来一直用 cat /root/logs/a.out |grep -C 10 "关键词", 日志文件小的时候很快, 刚想查一下,提示 grep: memory exhausted.
文件太大,下载到本地,notepad 也打不开.
想用 tail -n 50000 /root/logs/a.out |grep "关键字", 随着行数增加,还是找不到数据,最后也报了 memory exhausted
使用 less, 提示 may be a binary file. See it anyway? yes 乱码, 按网上设置后,还是打不开.
请教下大佬们 大日志文件, 根据关键词 怎么定位附近的日志?
4994 次点击
所在节点    Linux
38 条回复
Jooooooooo
2021-01-13 17:02:01 +08:00
直接 grep

不要 cat

grep '关键词' 文件
wuzhizuiguo
2021-01-13 17:05:31 +08:00
@Jooooooooo 还是... grep: memory exhausted
wangbenjun5
2021-01-13 17:05:56 +08:00
1 楼正解,你用 cat 相当于要把所有数据载入到内存里面,除非你的机器有 10G 的内存,直接 grep 就可
SuperManNoPain
2021-01-13 17:10:09 +08:00
你要是下载到本地, 本地机器配置可以的话, windows 可以用 gitbash 进行 less 或者 grep 操作, 曲线救国吧,
wuzhizuiguo
2021-01-13 17:12:04 +08:00
@SuperManNoPain 文件太大了(比下动作片还慢),本地也没有 10G 内存 会影响查看吗? (后面实在不行我准备试试)
Jirajine
2021-01-13 17:16:20 +08:00
@wuzhizuiguo grep/ripgrep 都是流式操作的,多大的文件也不会占很多内存。
dajj
2021-01-13 17:16:26 +08:00
还是命令行用的不对。 grep 不熟练

# 查找关键词所在行及其上下各 10 行的内容
grep 关键词 -B 10 -A 10 文件 | tee r.txt
xuboying
2021-01-13 17:16:37 +08:00
怀疑文件内某些行巨长,导致一行一行读也超载了。
Lee2019
2021-01-13 17:16:46 +08:00
grep 我记得是按行读的,原则上不会有这个问题
难道是你的日志某些行特别大吗?
ulimit -a 看看是不是限制的内存太小,适当放大一些再试试
wuzhizuiguo
2021-01-13 17:35:08 +08:00
@dajj 还是不行.. grep: memory exhausted
wuzhizuiguo
2021-01-13 17:37:55 +08:00
@xuboying 对,是有很长的一行(多行)
wuzhizuiguo
2021-01-13 17:38:40 +08:00
@Lee2019
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 127979
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 127979
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
dajj
2021-01-13 17:39:31 +08:00
@wuzhizuiguo 那就到达我知识的盲区了
lululau
2021-01-13 17:46:18 +08:00
3L 瞎说,6L 正解

估计是有些行太太太长了
fuis
2021-01-13 18:36:53 +08:00
个人建议日志 tar 下载回来,用 UltraEdit 查看。
privil
2021-01-13 18:45:07 +08:00
论日志截断的重要性。
liuxu
2021-01-13 20:32:47 +08:00
tail -n 50000 > tmp.log

看看你的 50000 有多大
wuzhizuiguo
2021-01-13 20:39:21 +08:00
@liuxu 50000 12.23MB
wuzhizuiguo
2021-01-13 20:44:08 +08:00
@fuis 准备日志去掉不必要的长数据行, 部分缺少的参数 加到阿里云日志里去. 下载使用 UltraEdit. grep 也确实不怎么用过..
liuxu
2021-01-13 20:52:00 +08:00
@wuzhizuiguo 12MB 不至于会出问题,在 grep xxx tmp.log 看看会不会报错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX