# 网站性能与APM

Source: https://support.kapsulehost.com/zh-cn/site-performance

应用性能监控针对 WordPress 和 WooCommerce 网站，能告诉您网站的时间究竟花在了哪里：响应时间百分位数、最慢的 URL、最慢的数据库查询，以及 PHP 的工作负荷情况。本指南将介绍如何启用 APM、读取各个面板，以及根据所显示的内容采取相应行动。

## APM 在 KPanel 中的位置

1. 登录 [KPanel](https://kpanel.kapsulehost.com)。
2. 点击左侧边栏中的**网站（Websites）**，然后点击对应的网站。
3. 在该网站的左侧菜单中，打开**性能（Performance）**，然后点击**APM**。

直接访问地址为 `/websites/<site-id>/performance`。

![KPanel 中某网站的应用性能监控](https://support.kapsulehost.com/help/screenshots/site-performance.4533b9b8.webp)

> **Note:** APM 是一项计划权益，随 Managed WordPress Pro 计划附带提供。在其他任何计划下，该页面会显示升级提示面板，说明 APM 所涵盖的内容，而不会显示仪表盘。如果您看到此面板，表示该功能在您当前的计划中不可用，而不是被关闭了。

## 开启 APM

在您启用之前，APM 处于关闭状态。在符合条件的计划下，该页面会显示一个**应用性能监控**卡片，并带有**启用 APM**按钮。

启用后，系统会在 PHP 工作进程层面添加一个轻量级的访问日志和慢速请求追踪器。它不会向您的页面注入任何内容，也不会给访客的请求增加任何负担，因此可以安全地永久保持开启状态。

启用后，该页面会显示一个带有开启日期的**APM 活跃**标签、一个**刷新（Refresh）**按钮，以及一个**禁用 APM**按钮。指标只会在有真实流量到达后才会出现，因此访问量较少的网站可能会在一段时间内显示**等待请求中**。

## 响应时间

第一个卡片显示最近一小时内的四项数据，标题中包含请求数量和采集时间。

| 指标 | 含义 |
|---|---|
| 中位数 (P50) | 一半的请求比此数值更快 |
| P95 | 95% 的请求比此数值更快 |
| P99 | 99% 的请求比此数值更快 |
| 5xx 错误率 | 因服务器错误而失败的请求所占比例 |

每个方块都有颜色标记，因此您不必了解具体阈值就能判断状态。

请将这些百分位数结合起来看，而不是单独看。如果中位数良好但 P95 非常糟糕，说明大多数请求正常，只有少数请求体验很差，这是单个慢页面、单个慢查询或某些 URL 缓存未命中的典型特征。如果中位数本身就不好，说明整个网站都慢，原因通常是结构性的：计划规格过小、主题过于沉重，或缓存未开启。

5xx 错误率是唯一应该为零的数值。任何持续高于零的情况都意味着访客正在遭遇失败。

## PHP 工作进程

**PHP 工作进程**卡片显示三项数值：

- **活跃工作者**：当前正在处理请求的 PHP 进程数量。
- **慢速请求**：超过慢速请求阈值并被记录下来的请求。
- **总计已处理**：进程池启动以来已接受的连接数。

活跃工作者数量是一种饱和度信号。如果在正常流量下该数值始终贴近上限，说明请求正在 PHP 层面排队等待，上方页面中所有响应时间中都包含了一部分排队时间。这是容量问题，而不是代码问题，解决方法是升级到更大的计划或降低每个请求的处理开销。

如果慢速请求数量在请求量保持稳定的情况下持续上升，说明某些环节的开销变大了。

## 最慢端点

此卡片按 P95 响应时间列出您网站上最慢的 URL，每一项都附带一个柱状图、以毫秒表示的 P95 数值，以及该端点收到的调用次数。颜色会标出最严重的几项。

请将其视为一份候选清单，而不是排行榜。您真正需要关注的是“慢”和“调用频繁”二者的交集：一个耗时四秒但每天仅被访问两次的页面，远不如一个耗时 900 毫秒但被访问一万次的页面重要。

常见的元凶包括：

- 没有建立索引、需要全表扫描的**搜索页面**。
- 每次请求都要构建大型查询的**分类和归档列表页面**。
- **购物车、结账和账户页面**，由于这些页面是逐访客独立生成的，因此从设计上永远不会被缓存。请参阅[网站缓存](https://support.kapsulehost.com/zh-cn/site-cache)了解哪些路径会按设计绕过缓存。
- **管理后台 URL**，这些页面始终是动态生成的。
- 请求内部**调用外部 API** 的任何内容，这种情况下，您实际测量的是对方服务器的性能。

## 慢查询

**慢查询**卡片列出平均耗时超过 100 毫秒的数据库查询，数据来自数据库自身的性能数据。每一行显示平均耗时、最长耗时、调用次数以及标准化后的查询文本。

查询文本是经过摘要处理的，去除了具体的字面值，因此参数不同但结构相同的查询会被归入同一行。这也正是调用次数具有意义的原因。

解决慢查询问题通常有三种方式：为该查询添加所需的索引、通过缓存查询结果来减少其执行频率，或者直接移除产生该查询的插件。调用次数非常高、平均耗时中等的查询，其总体影响往往比单个耗时惊人的异常查询更严重。

如果端点列表和查询列表都为空，该卡片会显示未检测到慢速请求，这意味着过去一小时内的所有数据都在正常阈值范围内。

## 善用 APM

**建立基线。** 在网站运行状况良好时查看这些数据，以便了解正常状态是什么样子。在您知道 P95 过去是 300 毫秒之前，现在的 700 毫秒本身毫无意义。

**一次只改变一项。** 启用缓存、刷新，然后比较。停用一个可疑插件、刷新，然后比较。批量修改无法给您提供有效的判断依据。

**有意识地刷新。** **刷新（Refresh）**按钮会按需重新读取指标。这些数据覆盖最近一小时，因此在评判某项改动的效果之前，请给它一点时间。

**也要关注 APM 之外的内容。** APM 只衡量您的应用程序本身。如果问题出在网络或边缘节点而不是代码上，[网站流量分析](https://support.kapsulehost.com/zh-cn/site-analytics)和[网站正常运行时间监控](https://support.kapsulehost.com/zh-cn/site-uptime-monitoring)会为您显示这些信息。

## 故障排查

**页面显示升级提示面板。** APM 随 Managed WordPress Pro 计划附带提供。其他计划则不包含此功能。

**APM 已开启但没有任何指标。** 目前还没有流量。指标会在网站收到请求后才会出现。

**APM 中的响应时间正常，但网站感觉很慢。** APM 仅衡量服务器端的耗时。浏览器中下载图片、运行 JavaScript 和加载字体所花费的时间在这里是不可见的。如果服务器端耗时良好但页面依然感觉很慢，问题就出在前端，或者出在您让浏览器去获取的内容上。

**插件更新后 P95 变差了。** 先检查最慢端点列表，再检查慢查询列表。如果某个插件在每次页面加载时都增加了一次查询，这两个列表中都会显示出来。

**所有请求一直都很慢。** 首先检查 PHP 工作进程是否饱和。如果工作进程持续处于上限，请先增加容量或降低每个请求的处理开销，再考虑其他优化措施。

**错误率高于零。** 请先修复这些问题，再去追求毫秒级的优化。从日志入手，并使用网站**错误页面**标签页中的“使用 Kora 排查问题”按钮，让 Kora 为您读取错误日志和近期的失败记录。请参阅[自定义错误页面](https://support.kapsulehost.com/zh-cn/site-error-pages)。

## 相关页面

- [网站缓存](https://support.kapsulehost.com/zh-cn/site-cache)通常是 WordPress 网站能带来最大性能提升的单一措施。
- [网站安全](https://support.kapsulehost.com/zh-cn/site-security)用于对同一网站进行漏洞和恶意软件扫描。
- 在开始移除插件之前，请先[创建备份](https://support.kapsulehost.com/zh-cn/taking-a-backup)。
