目录
前言:
如果一台服务器内存使用率持续处于一个高峰值,服务器可能会出现响应慢问题。例如ssh操作卡顿,用户访问失败、连接超时等问题。因此,第一时间进行排查故障是至关重要的。下面是排查思路。
1、查看系统内存的占用情况
free -m 命令进行查看
2、找出占用内存高的进程
使用top命令查看,或者是使用htop命令更加直观。
htop:
或者使用top工具
• USER 进程所有者
• PID 进程的ID•
• PR 进程的优先级别,越小越优先被执行
• NI nice值
• VIRT 进程占用的虚拟内存
• RES 进程占用的物理内存
• SHR 进程使用的共享内存
• S 进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
• %CPU 进程占用CPU的使用率
• %MEM 进程使用的物理内存和总内存的百分比
• TIME+ 该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
• COMMAND 进程启动命令名称
因为界面和实时刷新的限制,则通过top命令不一定能发现占用内存高的进程,因此需要使用ps aux 命令来检索当前系统下所有的运行进程。
示例:查看内存使用排名前10的进程
ps aux|head -n 1; ps aux| grep -v PID |sort -nr -k6 | head -n10
3、解决方法
情景 | 解决思路 |
应用程序访问小或者没有,但是依然占用过高的内存 | 需要去检查代码。主要是检查有没有代码是调用内存,但是没有释放。 |
应用程序访问量正常,是一个正常访问内的内存大小使用 | 需要增加硬件配置。 |
4、补充:如果物理内存使用完了,会发生的情况
情景 | 系统会发生的情况 |
系统关闭swap分区,但是物理内存使用完了 | 系统触发oom,会杀掉在运行的一个或者多个进程,来释放内存。这样会带来一些不好的影响。可在系统日志中找到一些oom触发的信息,日志会有记录。 |
系统启用了swap分区。然后物理内存使用满了 | 当系统的物理内存不足时,系统会将一些不经常使用的程序或数据存储到swap分区中,以释放物理内存供更重要的程序使用。当这些不经常使用的程序再次需要时,系统会将其从swap分区恢复到内存中使用。 由于swap分区是基于硬盘的虚拟内存,与物理内存相比,访问速度较慢。因此,当系统频繁将数据交换到swap分区时,会导致系统性能下降,因为硬盘的读写速度远远低于内存的访问速度。 |
建议:关闭swap分区提高系统性能。
查看分区的命令:swapon --show
临时关闭分区的命令:swapoff 交换分区设备名
永久关闭分区的命令: 编辑/etc/fstab文件,重启生效
5、补充; 虚拟内存的工作原理
交换分区(swap partition)是一种虚拟内存技术。虚拟内存是操作系统提供的一种抽象,它使得应用程序可以访问比实际物理内存更多的内存。虚拟内存通过将物理内存和磁盘空间合并,提供了一个连续的内存空间给进程使用。
虚拟内存工作原理:
a、当程序请求内存时,操作系统会检查虚拟内存空间是否满足需求。
b、如果需求超出物理内存,操作系统会从当前运行的进程中选择一个,将其暂时移动到磁盘上的交换空间(swap space)。
c、然后,操作系统会把被选中的进程数据移到磁盘上,释放物理内存,并把新的程序加载到内存中。
d、当程序访问其在虚拟内存中的部分时,如果发现它不在物理内存中,操作系统会自动地将磁盘上的数据页重新加载到物理内存中。
Linux 中可以通过 free 命令查看内存使用情况和交换空间的使用情况,
通过 vmstat 命令查看虚拟内存统计信息。