【Vim 一下日志文件,Java 进程没了?】学习总结

背景

【Vim 一下日志文件,Java 进程没了?】

文章地址:https://mp.weixin.qq.com/s/LKTw0RO-kMYkM4SJ61TIUw

背景简述:在生产服务器上使用vim查看nginx日志,日志大小有37G,而容器规格仅有8G。使用vim命令查看37G的文件,文件在加载过程中耗尽内存,触发linux oom killer机制,进而杀掉java进程。

总结整理

对于服务容器异常或者机器有问题,首先需要保证业务可用,需要及时的对相应有问题的服务进行下线,将请求流量进行切换,然后立刻重启或者增加实例,再对问题服务重启或者关闭前需要dump下堆栈信息,保存现场以便后面分析问题。

服务异常的排查点:

内存使用情况,CPU使用率,FullGC次数,IO情况等。

对于进程被killed的分析工具,可以使用dmesg。

vim在加载文件时会调用readfile函数读完文件,加载大文件会干爆内存。

linux oom killer在内存快被耗尽时会尝试杀掉一些进程,有一个打分机制,得分高的进程容易被杀掉,选择糟糕进程的机制不是很精准,存在误杀的可能。

运维规范:查看或搜索日志应使用less、grep、tail等命令,严禁使用vim命令查看日志,如需用vim编辑文件,需先确认文件大小。

dmesg工具详解

dmesg命令用于显示和控制内核环缓冲区消息。它通常用来诊断和调试系统内核相关问题。这个命令用于筛选出内核消息中与Java相关的内容。

bash 复制代码
dmesg -T | grep java

具体来说,这可以帮助我们诊断与Java应用程序相关的内核级别的问题,如内存分配、I/O错误或其他系统调用异常。

Java程序可能会消耗大量内存,通过此命令可以监控Java进程是否因内存不足而导致的内核级别的错误或警告信息。

bash 复制代码
dmesg -T | grep java | grep -i 'out of memory'

Java应用程序可能会进行大量的磁盘I/O操作,通过此命令可以检查Java进程是否遇到磁盘读取/写入错误。

bash 复制代码
dmesg -T | grep java | grep -i 'i/o error'

通过结合dmesg -T和grep命令,可以有效地筛选和分析与Java相关的内核消息。这种方法在诊断系统级别的问题时非常有用,尤其是涉及到内存管理、I/O操作和硬件驱动的情况。根据筛选出的具体错误信息,采取相应的措施进行优化和修复。

相关推荐
Flynn Liang11 分钟前
LLM 应用安全:Prompt 注入、越权与输入输出护栏
java·人工智能·大模型·langchain4j·llm 安全·prompt 注入·guardrail
特立独行的猫A6 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
Rabitebla12 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件12 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
budingxiaomoli13 小时前
Spring统一功能处理
java·后端·spring
一个天蝎座 白勺 程序猿13 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
楚山之石14 小时前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
Flynn Liang14 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
金銀銅鐵15 小时前
带您看懂字节码指令(三):同一行加法,为什么有四种指令
java·jvm
坤坤子吖16 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习