如何确定服务器瓶颈问题、快速解决瓶颈问题、提升服务器性能以及防止性能衰退。
概览
本指南介绍了如何通过 4 个步骤解决服务器过载问题:
评估
当服务器出现流量过载时,以下一项或多项可能会成为瓶颈:CPU、网络、内存或磁盘 I/O。确定哪个是瓶颈后,您就可以将精力集中在最有效的缓解措施上。
- CPU:如果 CPU 使用率持续超过 80%,则应进行调查并加以解决。当 CPU 使用率达到大约 80-90% 时,服务器性能通常会下降,并且随着使用率接近 100%,性能下降会更加明显。处理单个请求的 CPU 利用率可以忽略不计,但如果以流量高峰期间遇到的规模执行此操作,有时可能会使服务器过载。将服务分流到其他基础架构、减少高成本操作并限制请求数量,都可以降低 CPU 利用率。
- 网络:在高流量期间,满足用户请求所需的网络吞吐量可能会超出容量。某些网站可能还会达到累计数据传输上限,具体取决于托管服务提供商。减少与服务器之间传输的数据大小和数量,即可消除此瓶颈。
- 内存:当系统内存不足时,必须将数据卸载到磁盘以进行存储。磁盘的访问速度比内存慢得多,这可能会降低整个应用的速度。如果内存用尽,可能会导致内存不足 (OOM) 错误。调整内存分配、修复内存泄漏和升级内存可以消除此瓶颈。
- 磁盘 I/O:从磁盘读取或写入数据的速率受磁盘本身的限制。如果磁盘 I/O 是瓶颈,增加内存中缓存的数据量可以缓解此问题(但会增加内存用量)。如果这样做不起作用,您可能需要升级磁盘。
本指南中的技巧重点介绍了如何解决 CPU 和网络瓶颈问题。对于大多数网站来说,在流量激增期间,CPU 和网络是最重要的瓶颈。
在受影响的服务器上运行 top 是调查瓶颈问题的良好起点。如有可用的历史数据,请添加托管服务提供商或监控工具中的数据。
稳定
服务器过载可能会迅速导致系统其他部分出现级联故障。因此,请务必先稳定服务器,然后再尝试进行更重大的更改。
速率限制
速率限制可通过限制传入请求的数量来保护基础架构。随着服务器性能的下降,这一点变得越来越重要:随着响应时间的增加,用户往往会更频繁地刷新网页,从而进一步增加服务器负载。
修复
虽然拒绝请求的开销相对较低,但保护服务器的最佳方式是在服务器上游的某个位置处理速率限制,例如通过负载平衡器、反向代理或 CDN 来处理。
说明:
补充阅读材料:
HTTP 缓存
寻找更积极地缓存内容的方法。如果资源可以从 HTTP 缓存(无论是浏览器缓存还是 CDN)提供,则无需从源服务器请求该资源,从而减少服务器负载。
Cache-Control、Expires 和 ETag 等 HTTP 标头用于指明 HTTP 缓存应如何缓存资源。审核并修正这些标头可改善缓存。
虽然 Service Worker 也可以用于缓存,但它们使用的是单独的缓存,是适当 HTTP 缓存的补充,而不是替代方案。因此,在处理过载的服务器时,应着重优化 HTTP 缓存。
诊断
运行 Lighthouse,然后查看采用高效的缓存策略提供静态资源审核,以查看存留时间 (TTL) 介于短到中间的资源列表。对于所列的每个资源,请考虑是否应延长 TTL。以下是一个粗略的指导准则:
- 静态资源应使用较长的 TTL(1 年)进行缓存。
- 动态资源应使用较短的 TTL(3 小时)进行缓存。
修复
将 Cache-Control 标头的 max-age 指令设置为适当的秒数。
说明:
优雅降级
平滑降级是一种策略,旨在暂时减少功能以从系统中卸载过多负载。此概念可通过多种不同的方式应用:例如,提供静态文本页面而非功能齐全的应用、停用搜索功能或返回更少的搜索结果,或者停用某些开销较大或不重要的功能。应重点移除可安全轻松移除且对业务影响最小的功能。
改进
使用内容分发网络 (CDN)
您可以将传送静态资源的工作从服务器分流到内容分发网络 (CDN),从而降低负载。
CDN 的主要功能是通过提供位于靠近用户的庞大服务器网络,快速向用户分发内容。不过,大多数 CDN 还提供与性能相关的其他功能,例如压缩、负载均衡和媒体优化。
设置 CDN
CDN 的优势在于规模,因此很少有运营自己的 CDN 的必要。基本 CDN 配置的设置非常快(大约 30 分钟),只需将 DNS 记录更新为指向 CDN 即可。
优化 CDN 使用
诊断
运行 WebPageTest,找出未通过 CDN 传送(但应通过 CDN 传送)的资源。在结果页面上,点击“有效使用 CDN”上方的方框,查看应通过 CDN 提供的资源列表。