当前位置: 代码网 > 服务器>服务器>Linux > Linux服务器内存占用接近100%时的排查方法

Linux服务器内存占用接近100%时的排查方法

2026年08月15日 Linux 我要评论
服务器内存满了,想要排查具体是哪个服务或进程占用了大量内存,可以通过 linux 系统的常用命令来查看和定位。下面给你详细讲解常用的排查步骤和工具:一. 查看总内存使用情况free -m-m 参数以

服务器内存满了,想要排查具体是哪个服务或进程占用了大量内存,可以通过 linux 系统的常用命令来查看和定位。下面给你详细讲解常用的排查步骤和工具:

一. 查看总内存使用情况

free -m
  • -m 参数以 mb 单位显示内存信息
  • 可以快速判断总内存、已用、空闲、缓存等情况

二. 查看内存使用最多的进程

推荐使用 tophtop(若已安装):

用 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 服务:用 jcmdjmapjstat 查看 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 了解整体内存状态
  • topps aux --sort=-%mem 找出内存占用大的进程
  • 根据进程信息判断是哪个服务
  • 针对具体服务做处理和优化

以上就是linux服务器内存占用接近100%时的排查方法的详细内容,更多关于linux内存占用接近100%排查的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com