# 服务器内存使用率高

FAQ: https://open.seeyoncloud.com/#/faq/faq/v1/share?url=Z2JySmU+Mzo6

# 排查步骤

# 1、首先检查服务器配置是否满足手册要求

比如OA服务器内存要求至少16G,不同在线用户数及部署方式要求不同。 如果一个服务器上集中部署了多个服务,单个服务占用内存在合理范围,总的加起来导致总内存较高,应拆分或根据所有服务的内存要求之和计算判断。

# 2、检查服务器内存使用率高的原因

Windows

打开任务管理器,进入性能页,点击内存项,查看内存占用分类比例

  • 查看已提交,已提交总大小=物理内存+已分配虚拟内存。如果未分配虚拟内存,则系统会将空闲物理内存用于虚拟内存。此时需要判断用于虚拟内存的比例是否过大导致总内存使用率较高,适当增加虚拟内存可以减少物理内存使用。
  • 查看分页缓冲池、非分页缓冲池大小。如果这两者非常大,需要进一步使用Rammap等工具分析。
  • 各项数据看起来都不高,但实际内存使用率很高,同样需借助rammap、poolmon、strings等工具分析。比如之前S1触发微软Windows缺陷产生的进程号泄漏导致的内存泄漏。

Linux

通过top或free命令查看内存使用率时,应关注available列,而不是只看free空闲。Linux的特性会自动将空闲内存用于buffer/cache来加速系统运行。

# 3、查找服务器上内存使用率最高的进程

Windows

打开任务管理器,进程/详细信息,右键选择列,勾选提交大小,内存工作集,并倒叙排列,查找使用率高的1个或几个进程。

Linux

通过命令top -n 1 -o %MEM查看内存占用情况

# 4、OA服务占用内存高分析

  • 首先检查OA进程占用内存与堆内存配置是否接近。进程理论最大内存占用会大于最大堆内存配置(还有非堆内存等占用);如果远大于最大堆内存,则可能非堆内存占用异常,可以通过限制非堆内存大小或结合jmap导出dump分析
  • 检查最大堆内存配置是否合理,结合手册和实际老年代使用率判断
  • 如果老年代使用率峰值过低,且堆内存配置大于手册要求,可以适当降低堆内存配置用以释放内存
  • 如果老年代使用率峰值已经达到70%左右,则不建议降低堆内存配置
  • 如果最大内存存参考手册合理设置,但老年代使用率过高,可能由于内存泄漏或溢出导致进程实际占用内存高。可以按内存溢出排查方法分析。
编撰人:wangyxyf