如何解决资源过度使用问题

所有虚拟主机账户的资源限制均由CloudLinux LVE(轻量级虚拟环境)强制执行,这是一项内置于服务器内核级别的技术。该限制确保所有网站都能公平、平等地访问其分配的资源份额。 

这些资源包括 CPU、物理内存、入口进程和活动进程数。您可以在我们的可接受使用政策中找到这些资源的可接受值以及软性和硬性突发值。 

当您的账户持续达到这些限制时,我们称之为资源超用。这可能导致网站性能变慢、出现错误信息或账户下托管的网站超时。 

注意:如果您主机账户中的某个域名超出资源限制,同一账户下托管的所有其他域名也会受到影响,因为它们共享同一资源池。

本文将帮助您识别并修复资源超用问题。

检查您当前的资源使用情况 

要在 cPanel 中检查您的主机账户资源使用情况,请查看右侧显示的统计信息部分:

注意:您还会在 Spaceship 账户内收到关于主机账户资源限制的通知。但如需更全面的信息,请参阅 cPanel 账户的“主机使用情况”菜单。

违反我们的可接受使用政策将会在“主机管理”菜单 > 点击相关主机套餐旁的“管理” > 主机使用情况部分 > 报告日志子部分中列出。  

让我们分解一下关键资源指标以及它们如何影响您网站的性能:

CPU 使用率

CPU 使用率显示在任意时刻分配的 CPU 功率的使用情况。它以您主机账户总容量的百分比显示。

如果 CPU 使用率达到100%,您的账户正在消耗其所有分配资源。因此,任何新进程都将被延迟(进入休眠),直到现有进程完成。这可能导致明显的变慢,极端情况下,您的网站可能会超时。

虚拟内存使用量

这指的是进程在您的LVE(轻量级虚拟环境)中可以请求的内存量。

当进程尝试分配内存时,CloudLinux 会检查总虚拟内存使用量是否在设定限制内。如果超出限制,则会阻止新的内存分配,通常导致进程失败。

物理内存使用量(RAM)

物理内存指分配给您账户的实际 RAM。与虚拟内存(通常使用磁盘存储如交换文件)不同,物理内存用于实时处理活动任务。 

例如,发布一篇大型文章可能会暂时消耗所有可用物理内存。虽然这可能导致短暂的变慢,但任务完成后,使用量通常会恢复正常。

如果您的物理内存使用量达到上限,您可能会在网站上遇到 PHP 错误。极少数情况下,可能会出现 CloudLinux 错误页面。这些问题通常很短暂,当使用量降至阈值以下时会自动解决。

入口进程

入口进程表示同时进入您账户的进程数。每个用户运行的 PHP 或 CGI 脚本都会启动一个入口进程。虽然它常被误认为“允许的访客数量”,但这些进程通常运行并快速完成,即使有多个用户,您也不太可能达到上限——除非您的网站流量突然激增。

进程数

该指标包括账户生成的所有进程,不仅仅是 PHP、SSH 或定时任务。它是反映总活动量的更广泛限制。

即使在高负载下,这个数字通常也很低,因为大多数非 PHP 进程都很短暂并迅速完成。

I/O 使用量(输入/输出)

I/O 使用量衡量您的账户产生的磁盘活动量。任何涉及读写数据的操作——如备份或文件上传——都计入此限制。

为确保所有用户的性能公平,每个账户的磁盘速度都有上限。如果达到该限制,您的进程仍会运行,只是速度会变慢。

在大多数情况下,除非您正在执行磁盘密集型任务(如生成大型网站备份),否则不会注意到 I/O 使用量。


定义账户上运行的活动进程

如果您的主机账户达到某些资源限制,第一步是确定哪些进程导致了超用。

通过 SSH

如果问题持续超过几分钟,您可以通过 SSH 查看账户在高峰时运行的活动进程:

  1. 请在“管理 shell”cPanel 菜单中检查连接状态,确保您的主机账户已启用 SSH。如果 SSH 被禁用,请按照本文章中的步骤启用。

  2. 在 cPanel 的终端菜单中运行以下命令之一,以识别账户中的活动进程:

    - ps faux
    - top -c

    随后,您将看到使用您主机账户大部分资源(CPU、虚拟内存等)的进程列表。任务数量及其状态(活动、休眠或已停止)也会在命令输出中显示。

    我们将向您展示“top -c”命令的输出示例,并提供正确理解的说明:


    以下是如何阅读此类输出的简单指南:

    1. 第一行 - 指定当前时间、上次启动以来的时间、已登录用户会话和系统平均负载(最近 1 分钟、5 分钟和 15 分钟)。

    2. 第二行 - 列出主机账户内的所有进程:运行、休眠、已停止和僵尸(已终止但未正确移除的进程)。

    3. 第三行 - 提供 CPU 使用情况(百分比),其中:

      • us = 用户进程

      • sy = 系统进程

      • ni = 优先级提升 nice

      • wa = 等待 I/O 完成的时间

      • hi = 硬件中断

      • si = 软件中断

      • st = 被虚拟机管理程序任务占用的时间

    4. 第四和第五行 - 表示内存使用情况(RAM):总量、已用、空闲和缓冲区。

    5. 接下来的行提供当前进程的详细信息:

      • PID - 进程 ID

      • USER - 作为进程所有者的 cPanel 用户

      • PR - 进程优先级

      • NI - 进程的 nice 值

      • VIRT - 进程使用的虚拟内存

      • RES - 进程使用的物理内存

      • SHR - 进程使用的共享内存

      • S - 进程状态(S - 休眠,D - 不可中断休眠,R - 运行,T - 停止,Z - 僵尸)

      • %CPU - 此进程使用的 CPU 百分比

      • %MEM - 此进程使用的物理内存百分比

      • TIME+ - 进程使用的总 CPU 时间

      • COMMAND - 进程名称


  3. 在怀疑被黑时终止任何进程前,请在 cPanel 账户的定时任务菜单中检查现有的定时任务。如果发现任何可疑条目或不确定的定时任务,最好将其删除,以防止潜在的危险脚本运行。

    一旦确定了导致问题的具体进程,您可以在“终端”菜单中运行 kill -9 PID SSH 命令,其中PID为上一步获取的进程 ID。

    要终止除必要系统进程外的所有进程,可以使用以下命令:

    ps aux | grep -v 'bin/bash' | awk '{ print $2 }' | grep -v PID | xargs kill -9

  4. 接下来,确定当前正在运行的 MySQL 进程。

    您可以检查 cPanel 账户的所有 MySQL 进程(1),或按 MySQL 用户检查(2)。

    为此,请在 cPanel 的终端中运行以下命令之一:

    要检查整个主机账户的 MySQL 进程:
    mysql -u $CPANEL_USER -p -e "SHOW PROCESSLIST;"

    要检查某个 MySQL 用户的 MySQL 进程:
    mysql -u $MYSQL_USER -p -e "SHOW PROCESSLIST;"

    请务必将“CPANEL_USER”替换为您的 cPanel 用户名以检查主机账户(1)的进程,将“$MYSQL_USER”替换为具体的 MySQL 数据库用户名以检查每个 MySQL 用户(2)的进程。

    然后,输入 cPanel 账户密码(1)或具体数据库用户的密码(2):


  5. 最后一步是终止特定数据库用户的 MySQL 进程。这只能由我们的支持团队执行。欢迎联系我们,我们很乐意为您提供帮助。

通过“资源使用”菜单 

如果问题只持续几秒钟,可能很难确定导致问题的进程,因为如此短的时间内数据不会被记录。 

但您始终可以在 cPanel 的资源使用菜单中查看历史趋势。这有助于您识别模式或确定哪些资源接近其限制:


关于频繁触及的资源的消息将在打开菜单后 > “仪表盘”部分下显示,并附有具体限制的参考: 

在菜单的当前使用情况部分,使用时间范围下拉菜单选择一个时间段,查看账户在此期间的资源使用情况:


选择后,您将看到显示详细统计信息的图表和表格:



以下是上表中各数值的简单说明:

  • CPU – CPU 限制

  • vMEM/vM – 虚拟内存限制

  • pMEM/pM – 物理内存限制

  • EP – 入口进程

  • nPROC/nP – 进程数

  • IO – 输入/输出限制

  • A – 平均使用量

  • L – 账户设置的限制

  • F – 失败

在 cPanel 终止活动进程时可能出现的问题

在 cPanel 停止活动进程可能有助于解决性能问题,但请谨慎操作——这可能会带来新的问题。以下是一些需要注意的关键点:

  • 数据完整性:强制终止进程可能会影响数据完整性。尤其是当该进程涉及账户内的数据写入或更新时。终止前最好确认该进程未关联关键数据库操作。

  • 未完成的事务:在操作中途停止进程可能导致事务未完成,并引发数据库状态问题。极端情况下,可能导致数据损坏或丢失。

  • 服务中断:某些进程(如与 MySQL 相关的进程)对核心服务至关重要。终止它们可能导致临时服务中断并影响网站功能。

  • 未保存的更改:如果在保存更改前终止管理配置或设置的进程,可能会影响功能或应用的表现。

  • 资源分配:虽然终止进程可以释放系统资源,但并不能解决高使用率背后的根本原因。为防止问题反复出现,需要进行更深入的分析。

  • 应用稳定性:中断与 Web 应用相关的进程可能导致其不稳定。在采取操作前,了解进程的工作原理非常重要。

  • 日志记录与监控:有些进程涉及日志记录或系统监控。终止它们可能会中断这些功能,因此请确保关键日志和监控工具保持运行。

    在关键情况下(如资源超用或怀疑恶意活动时),即使有风险也可能需要终止进程。但在采取行动前务必权衡潜在影响。

降低进程终止风险的最佳实践

  • 备份您的数据:在进行重大更改之前,尤其是在操作数据库时,请务必创建备份。

  • 尽可能使用受控关机:尽量逐步关闭进程,以降低数据丢失或损坏的风险。

  • 禁用恶意组件:如果您怀疑网站的某个部分(例如插件或主题)正在生成恶意进程,请立即禁用它以防止进一步损害。如有疑问,请与专家一起检查任何可疑活动。

  • 使用维护模式:临时将您的网站置于维护模式,有助于判断某些进程是否会被自动重新创建。

  • 密切监控:终止任何进程后,请仔细观察系统行为,并准备好排查意外问题。

识别出有问题的进程后,如何减少资源使用

一旦您确定了导致账户资源超限的进程,请尝试以下常见方法来减少资源使用:

  • 流量激增:要查看您的账户何时有过多活动进程,请打开资源使用菜单 > 快照 > HTTP 查询标签:


    如果您在输出中看到有大量请求,例如指向 index.php 页面,这可能是由于网站流量过高(如访客或机器人)导致的。

    请检查Awstats访客菜单(在 cPanel 中)以获取详细的访客分析,从而找出具体原因。流量突然增加可能是资源使用上升的原因。如果您的访客数量持续增长且仍然遇到限制,可能需要考虑审查并升级当前的主机方案。

    统计部分的Awstats菜单中,您可以通过点击域名对应的“查看”按钮,找到高 CPU 占用的来源:


    注意:请注意,Awstats 菜单中的数据不是实时更新的,只有每月统计可用。请务必检查统计数据的更新时间,以确保信息与您的情况相关。您可以在“最后更新”一行找到此信息。

    进入后,您将看到网站各个元素消耗带宽的详细统计,包括:

    • 未知机器人:如果不希望出现此类流量,可以通过robots.txt文件进行屏蔽,或进行限速(例如针对Googlebot),也可以通过 .htaccess 文件和 User-Agent 字符串进行强制屏蔽。

      注意:这些更改可能会影响网站的 SEO。如果不确定是否要继续,建议咨询 SEO 专家。

    • 图片:如果某张图片收到大量请求,可能意味着该图片正遭受 DDoS 或自发性 DoS 攻击。

    • 页面:网站页面或其上的产品也可能受到 DDoS 攻击的影响。

    • 文件

    • 下载文件等。

  • 网站近期更改:如果这是您首次遇到资源使用问题,请检查您网站最近的更新或更改。这些更改可能导致负载增加。

  • 新插件或主题:如果您最近安装了新插件或主题,请尝试禁用它,并至少监控网站性能 10 分钟。

    此外,您可以在GTmetrix 报告 > Waterfall 标签页中找到加载缓慢的插件。

    注意:更改可能不会立即生效。我们建议您监控网站行为长达一小时,以获得准确结果。

  • 网站优化:使用Google PageSpeed Insights等工具优化网站性能。

    此外,以下插件将帮助您监控网站的资源使用和整体性能——这对于定位网站内部瓶颈非常有用:

如果您仍然遇到资源问题,请通过实时聊天或电子邮件联系我们的支持团队。我们会帮助您识别并解决任何问题。

需要提供有效的电子邮箱