服务器内存满了,想要排查具体是哪个服务或进程占用了大量内存,可以通过 linux 系统的常用命令来查看和定位。下面给你详细讲解常用的排查步骤和工具:
一. 查看总内存使用情况
free -m
-m参数以 mb 单位显示内存信息- 可以快速判断总内存、已用、空闲、缓存等情况
二. 查看内存使用最多的进程
推荐使用 top 或 htop(若已安装):
用 top
top
进入后,按 %mem 列排序(通常默认就是按 cpu 排序,可以按 m 键切换到按内存排序)
按 m 键后,最占内存的进程会排在最上面,查看进程名和 pid
按 q 退出
用 htop(如果安装了)
htop
界面更友好,可以直接点击内存列排序,搜索进程等
三. 用 ps 命令列出占用内存最多的进程
这是最直接的命令行方式:
ps aux --sort=-%mem | head -20
- 显示占用内存最多的前20个进程
- 输出字段包括用户、pid、cpu、内存%、启动时间、命令等
四. 查看某个进程的详细内存使用情况
假设你找到了某个 pid(比如 1234),可以查看具体内存使用:
pmap -x 1234
或者
cat /proc/1234/status | grep vm
五. 查看系统中所有服务的内存占用情况(结合 systemctl)
如果你想针对服务,可以先找到对应的进程 pid 后,再结合 systemctl status 服务名 去确认。
六. 常见场景诊断
- java 服务:用
jcmd、jmap或jstat查看 jvm 内存 - 数据库服务:如 mysql、postgresql 也可能占用大量内存
- 缓存服务:redis、memcached 等也应关注
七. 实用脚本示例:查看 top 10 占用内存最多的进程及对应服务名
ps -eo pid,ppid,cmd,%mem --sort=-%mem | head -10
如果你想结合服务名,可能需要你了解进程对应的服务。
八. 清理建议
排查到占用内存的进程后:
- 如果是非关键服务,可以考虑重启或停止
- 如果是内存泄漏的服务,建议查看服务日志或抓取线程堆栈分析
- 优化配置,合理分配服务内存
九. 堆内存设置
nohup java -xmx1g -xms1g -xx:maxmetaspacesize=1024m -xx:+useg1gc `cat jvmparams` -jar spider.jar --server.port=6085 > _spider.out 2>&1 &
1.nohup
- 作用:忽略挂断信号(sighup),即使你关闭了终端,程序仍然会继续运行。
- 适合远程服务器启动长期运行的程序。
2.java
- 调用 java 虚拟机启动 java 程序。
3. jvm 参数部分
-xmx1g:设置 jvm 最大堆内存为 1gb。-xms1g:设置 jvm 初始堆内存为 1gb。两者相同可以避免堆内存动态扩展带来的性能消耗。-xx:maxmetaspacesize=1024m:设置元空间(metaspace,存放类元数据的内存区域)最大为 1024mb。-xx:+useg1gc:启用 g1 垃圾回收器(适合大内存和响应时间要求场景)。`cat jvmparams`:将jvmparams文件内容作为 jvm 参数插入。如果jvmparams文件中有其他 jvm 参数,会被补充进来。- 例如
jvmparams文件包含:-xx:+printgcdetails -xx:+heapdumponoutofmemoryerror,则这些参数也会被加上。
- 例如
4.-jar spider.jar
- 表示运行名为
spider.jar的可执行 jar 包。 - jvm 会加载并执行该 jar 包中的
main-class指定的主程序。
5.--server.port=6085
- 这是传给 java 应用程序(比如 spring boot)的参数,指定服务监听的端口为 6085。
- 注意这是程序参数,不是 jvm 参数。
- 该参数通常被框架识别用来设置服务端口。
6. 重定向部分:> _spider.out 2>&1
> _spider.out:将标准输出(stdout)重定向到_spider.out文件。2>&1:将标准错误(stderr)重定向到标准输出(stdout),也就是和标准输出一起写入_spider.out。- 这样所有运行日志和错误信息都保存在
_spider.out文件中,方便查看和调试。
7. 结尾的&
- 表示将该命令放到后台运行,启动后会立即返回 shell 提示符,程序在后台继续运行。
- 适用于远程服务器或需要继续使用终端的场景。
总结
- 先用
free -m了解整体内存状态 - 用
top或ps aux --sort=-%mem找出内存占用大的进程 - 根据进程信息判断是哪个服务
- 针对具体服务做处理和优化
以上就是linux服务器内存占用接近100%时的排查方法的详细内容,更多关于linux内存占用接近100%排查的资料请关注代码网其它相关文章!
发表评论