跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Linux 根据关键字查看大文件日志,grep: memory exhausted
未分類
15 1 月 2021

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

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

資深大佬 : wuzhizuiguo 0

日志文件 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 乱码, 按网上设置后,还是打不开.
请教下大佬们 大日志文件, 根据关键词 怎么定位附近的日志?
大佬有話說 (34)

  • 資深大佬 : Jooooooooo

    直接 grep

    不要 cat

    grep ‘关键词’ 文件

  • 主 資深大佬 : wuzhizuiguo

    @Jooooooooo 还是… grep: memory exhausted

  • 資深大佬 : wangbenjun5

    1 正解,你用 cat 相当于要把所有数据载入到内存里面,除非你的机器有 10G 的内存,直接 grep 就可

  • 資深大佬 : SuperManNoPain

    你要是下载到本地, 本地机器配置可以的话, windows 可以用 gitbash 进行 less 或者 grep 操作, 曲线救国吧,

  • 主 資深大佬 : wuzhizuiguo

    @SuperManNoPain 文件太大了(比下动作片还慢),本地也没有 10G 内存 会影响查看吗? (后面实在不行我准备试试)

  • 資深大佬 : Jirajine

    @wuzhizuiguo grep/ripgrep 都是流式操作的,多大的文件也不会占很多内存。

  • 資深大佬 : dajj

    还是命令行用的不对。 grep 不熟练

    # 查找关键词所在行及其上下各 10 行的内容
    grep 关键词 -B 10 -A 10 文件 | tee r.txt

  • 資深大佬 : xuboying

    怀疑文件内某些行巨长,导致一行一行读也超载了。

  • 資深大佬 : Lee2019

    grep 我记得是按行读的,原则上不会有这个问题
    难道是你的日志某些行特别大吗?
    ulimit -a 看看是不是限制的内存太小,适当放大一些再试试

  • 主 資深大佬 : wuzhizuiguo

    @dajj 还是不行.. grep: memory exhausted

  • 主 資深大佬 : wuzhizuiguo

    @xuboying 对,是有很长的一行(多行)

  • 主 資深大佬 : wuzhizuiguo

    @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

    @wuzhizuiguo 那就到达我知识的盲区了

  • 資深大佬 : lululau

    3L 瞎说,6L 正解

    估计是有些行太太太长了

  • 資深大佬 : fuis

    个人建议日志 tar 下载回来,用 UltraEdit 查看。

  • 資深大佬 : privil

    论日志截断的重要性。

  • 資深大佬 : liuxu

    tail -n 50000 > tmp.log

    看看你的 50000 有多大

  • 主 資深大佬 : wuzhizuiguo

    @liuxu 50000 12.23MB

  • 主 資深大佬 : wuzhizuiguo

    @fuis 准备日志去掉不必要的长数据行, 部分缺少的参数 加到阿里云日志里去. 下载使用 UltraEdit. grep 也确实不怎么用过..

  • 資深大佬 : liuxu

    @wuzhizuiguo 12MB 不至于会出问题,在 grep xxx tmp.log 看看会不会报错

  • 資深大佬 : calmzhu

    5w 才 12m 。说明单行不大。或者大行未出现在后 5w 行。

    wc -l a.out 如果能统计出行数。那么单行不至于超过内存错误。用 grep 贴出完整命令。如果仍然报内存错误。那很可能就是中间存在某些行特别大。

    最省事的用 python/go 打开文件。不载入文件内容,而是手动控制偏移量进行没行计数。统计一下最大行的字符数。根据编码换算成字节大小。找到最大一行看看是不是过大。

    如果是顺便加个查找功能,不一次读一行就行了。

    或者用 dd 命令把文件切成 10 个约 1G 的再来 grep.这个不严谨,可能把超级行切断。但是可以试试看看结果再说

  • 資深大佬 : ETiV

    先把 -C 参数去掉试试,保留上下文的话,内存占用肯定多

    另外加一个 –line-buffered,遇到匹配的行就立即输出

  • 資深大佬 : helloworld000

    用 vim 打开在 vim 里找?

  • 資深大佬 : AmitabhaPk

    分成小块文件再检索不行么

  • 資深大佬 : faqqcn

    论日志采集平台的重要性

  • 資深大佬 : zlowly

    如果是行超长,可以加多个管道 fold -w 4000 之类的强制换行,或者干脆 cut,tr 之类的强制行截取。

  • 資深大佬 : fuis

    @wuzhizuiguo 相信我,UE 是看大日志最好用的,其他什么七七八八 vim fold dd 一概都是没看过大日志的

  • 資深大佬 : yzbythesea

    论日志 Json 化重要性。

  • 資深大佬 : Meltdown

    grep -a 试试

  • 資深大佬 : lvzhiqiang

    将日志拆分吧,有拆分工具,split 。 或者如果格式化过的的话,要么就全部导入到 ELK 试试。

  • 資深大佬 : hanxiV2EX

    应该从根源解决,日志文件按时间或大小进行拆分。

  • 資深大佬 : php8

    @wangbenjun5 pipe 写入有容量控制,未读数据超出 buffer 大小写入会阻塞,先 cat 再 grep 多两次 memcpy,多用几 MB 内存,1000G 的文件也不会因此内存不够

  • 主 資深大佬 : wuzhizuiguo

    好的,谢谢各位大佬的帮助. 现在选择了 不定时清理日志(体积小,但是以往的结果就不能查了… 也怕几个日志大了 空间不够了)
    最终汇总下.
    小日志文件, 查看末尾几行 tail -n 500 /root/logs/a.out;
    有关键词时, cat /root/logs/a.out |grep -C 10 “关键字” , 定位”关键字”上下 10 行内容 (文件大时,grep: memory exhausted)
    或者 grep -C 10 “关键字” /root/logs/a.out (遇到我这种有超长行的, 也会 memory exhausted)
    坛友提到的 vim 打开, 这个我在其他帖子看到, 大文件也不能这样做.
    如果是 末行几行, 例如 几万行内(从时间推算), 可以用 tail -n 30000 /root/logs/a.out > tmp.out 去截取日志, 变小了,然后再去查询关键字. (行数太大,也会报错)
    tar 把文件下载回来, 用 UltraEdit 查看(不过太大了 下载也是个问题..,生成的日志 UltraEdit 中文乱码 )
    或者分割文件, 变小了再查看.
    日志可以按时间分开,每天一个文件等.

  • 資深大佬 : jaliemoon

    sed -n ‘/2019-10-15 10:[0-9][0-9]:[0-9][0-9]/,/2019-10-15 11:[0-9][0-9]:[0-9][0-9]/’p server.log >/app/jboss/jboss-5.1.0.GA/server/ngr/log/20191015.log
    sed -n ‘/2020-12-09 02:[0-9][0-9]:[0-9][0-9]/,/2020-12-09 03:[0-9][0-9]:[0-9][0-9]/’p server.log >20201209server2.log
    我遇到大日志都是直接取时间区间拷贝下来看,不知道主能不能用上

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具