提升服务器稳定性:搞定内存过高的实用优化方法

芝麻
2025-09-10
点 赞
22
热 度
126
评 论
0

服务器内存占用过高问题解决分享

最近一段时间,我的服务器频繁出现了一个让人头疼的问题 —— 内存占用过高。这个问题直接导致了网站运行变得卡顿,无论是页面加载速度,还是用户在网站上进行操作时的响应效率,都大幅下降。

要知道,网站的流畅度直接关系到访客体验,一旦出现卡顿,不仅会让正在浏览的用户失去耐心,可能直接关闭页面离开,还会影响用户对网站的整体印象,甚至可能导致潜在客户的流失,对网站的长期发展十分不利。

面对问题,寻求解决方案

面对这个棘手的情况,我多次与阿里云官方进行了沟通。在沟通过程中,我详细说明了服务器内存占用过高的现象、网站卡顿的具体表现以及由此带来的不良影响。经过双方的反复交流和探讨,阿里云方面最终为我提供了几个针对性的解决方法,后续我会将这几个方法详细整理出来,与大家分享,希望能给遇到类似问题的朋友提供一些参考。

使用atop工具查找问题,更快找到针对方法

  • Atop是一款专为监控Linux系统资源与进程设计的工具,它能详尽地报告所有进程的活动情况。该工具以固定频率记录系统和进程的动态。在ECS实例遇到问题时,用户可以获取相应的atop日志文件以进行分析。本文旨在介绍如何在Linux实例中安装、使用以及自定义atop的配置。

  • Atop收集的数据包括CPU、内存、磁盘和网络资源的利用情况,以及进程的运行状态,并以日志文件的形式保存在磁盘上。对于每一个进程,系统会显示其CPU使用率、内存占用、磁盘使用率、优先级、用户名、状态以及退出码等信息。用户可以通过修改atop的配置文件来自定义日志的采集频率、日志文件的存储路径和轮转策略等参数。

本步骤以Ubuntu操作系统的ECS实例为例,为您介绍如何安装atop监控工具。

  1. 远程连接ECS实例。

  2. 按照您的操作系统,执行对应的安装命令。

说明如果上述列举的操作系统未包含您的发行版,请访问atop官方网站以获取安装信息。更多内容,请参见下载atop

  1. 更新软件源中的所有软件列表。

    sudo apt update 
  2. 执行如下命令,安装atop。

    sudo apt install -y atop
  3. 执行如下命令,启动atop服务。

    sudo systemctl start atop

查看实时系统指标

  • 每 5 秒查看一次系统指标。

    atop 5
  • 查看当前时间之后5分钟内(共30次,间隔10秒)的系统指标。

    atop -M 10 30
  • 查看当前时间之后10分钟(10 次,间隔 60 秒)的系统指标,并将结果写入文件。

    atop -M 60 10 > /log/atop.mem

排查异常进程

  • 如果发现某个进程占用大量内存,可以通过以下命令结束该进程(请确保了解该进程的作用,避免误操作):

    sudo kill -15 <PID>

如果atop显示都是正常的程序,后台安全扫描也没有挖矿、webshell等注入病毒情况,可以使用下述方案优化


方法一:配置Linux实例的swap分区

在Linux操作系统中,当系统需求增加内存资源且物理内存已达到上限时,会启用swap分区(即交换空间)。交换空间的主要作用是为不活跃的进程及数据提供临时存储,从而避免因物理内存不足而导致的系统崩溃。它实际上充当了物理内存的补充,确保即便在物理内存耗尽的情况下,系统仍能保持稳定运行。

重要

  • 启用swap分区可能会引起内存I/O性能的降低。在ECS实例内存不足的情况下,建议优先通过调整实例规格来提升实例的物理内存。若因业务需求必须开启swap分区,请参照本文提供的配置方法。

  • 若您采用的是常规云盘,则不推荐启用swap分区,理由是其I/O性能相对较弱,可能会引起性能降低和I/O瓶颈。至于其他类型的云盘,是否使用swap分区应结合具体情况进行判断,并需合理配置,以减少swap分区的频繁操作,从而保障系统的性能与稳定性。

查看swap分区配置

  1. 远程登录Linux实例。

  2. 执行以下命令,查看swap分区的配置。

swapon --show

如果回显信息为空,表示系统没有swap分区,您可以根据需要配置swap分区

如果出现类似以下回显信息,表示系统已开启swap分区,您可以根据需要关闭swap分区

NAME TYPE SIZE USED PRIO
/var/swap file 1024M 0B -2

配置swap分区

开启swap分区

1.执行以下命令,创建用于交换分区的文件。

sudo dd if=/dev/zero of=/var/swap bs=1M count=1024

说明:

  • of的值/var/swap是变量,表示交换分区的标识,请您自定义设置,该变量值不能和已有分区标识相同。

  • bscount的值表示创建的交换文件的大小,您可以自定义设置,该命令中bs=1M count=1024表示设置交换文件的大小为1 GB。

2.执行以下命令,将文件格式化为swap分区。

sudo mkswap /var/swap

说明:

如果使用mkswap命令创建swap时出现类似mkswap: error: swap area needs to be at least 40 KiB报错,表示指定的swap分区文件太小,swap分区文件至少应该大于40 KB,您需要重新创建更大的交换文件。

3.执行以下命令,开启swap分区。

sudo chmod 600 /var/swap
sudo swapon /var/swap

4.执行以下命令,验证swap分区是否已开启。

swapon --show

5.如下回显信息表示swap分区已开启。

NAME TYPE SIZE USED PRIO
/var/swap file 1024M 0B -2

6.在/etc/fstab文件中写入新分区信息,配置开机自动挂载swap分区。

echo '/var/swap none swap defaults 0 0' | sudo tee -a /etc/fstab

7.查看新分区信息。

cat /etc/fstab

8.结果如下所示,可以查询已配置的swap分区信息。

/var/swap none swap defaults 0 0

9.重启ECS实例后,再次检查swap分区是否自动启用。

swapon --show

10.(条件可选)编辑/etc/rc.local文件, 排查是否有swapoff -a 命令。如果有将其修改为 swapon -a,确保 /etc/rc.local 中的命令与 /etc/fstab 的配置一致,以确保swap分区能够正常启用。

相关操作

在Linux系统中,可以通过设置swappiness参数来确定系统对swap分区的使用原则,swappiness参数取值范围为0到100。

  • swappiness值越低,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用swap分区。

  • swappiness值越高,表示积极地使用swap分区,并且把内存中的数据及时地置换到swap分区。

重要

调整swap参数是一项需谨慎执行的任务,不恰当的修改可能引发系统性能下滑或虚拟内存使用不符合预期。请根据实际业务场景,在充分理解参数功能的基础上谨慎操作。若您不确定是否需要进行调整,建议维持默认配置。

  1. 编辑/etc/sysctl.conf文件,以物理内存少于10%时才使用swap分区为例,需要调整以下参数值。

    vm.swappiness=10
  2. 保存并退出,然后执行以下命令使配置生效。

    sudo sysctl -p
  3. 执行以下命令,验证swappiness参数配置是否生效。

    cat /proc/sys/vm/swappiness

关闭swap分区

  1. 执行以下命令,关闭swap分区。

    sudo swapoff /var/swap

    说明

    其中/var/swap为swap分区标识,请您根据实际环境替换。

  2. 编辑etc/fstab文件,并删除类似以下的swap相关挂载信息,取消swap自动挂载。

    /var/swap none swap defaults 0 0
  3. 保存并退出,然后执行以下命令,确认swap分区是否已经关闭。

    swapon --show

    如果回显信息为空,表示系统已关闭swap分区。

使用方法一前后对比


方法二:优化代码和数据库查询

首先,我们可以对网站的代码进行优化。这包括检查并修复代码中的内存泄漏、减少不必要的内存分配等。例如,我们可以使用性能分析工具来定位代码中的性能瓶颈,然后针对性地进行优化。

此外,我们还需要对数据库查询进行优化。过长的查询语句、复杂的关联查询等都可能导致内存占用过高。我们可以通过以下几种方式来优化数据库查询:

  • 使用合适的索引,提高查询效率。

  • 避免使用SELECT *,只查询需要的字段。

  • 使用分页查询,减少单次查询的数据量。

方法三:增加服务器资源

如果优化代码和数据库查询后,内存占用问题仍然存在,我们可以考虑增加服务器资源。这包括增加物理内存、提高CPU性能等。具体操作如下:

  • 购买更高配置的服务器,增加物理内存和CPU性能。

  • 使用阿里云的弹性伸缩功能,根据实际需求自动调整服务器资源。

  • 优化服务器配置,例如调整内存分配策略、优化操作系统等。

总结

服务器内存占用过高致网站卡顿,可通过 atop 工具排查异常进程,搭配配置 Linux swap 分区(注意常规云盘不推荐)、优化代码与数据库查询、增加服务器资源(如升级配置或用弹性伸缩)解决。

鸣谢:阿里云

参考信息:


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

芝麻

esfj 执政官

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。

目录

欢迎来到知栖小筑的站点,为您导航全站动态

9 文章数
2 分类数
0 评论数
37标签数
最近评论