我曾遇到过几次我的某个网站的主页无法在浏览器中加载的情况。该网站在 django/fastcgi/nginx 上运行。
这个问题很难重现,因此,为了了解这个问题的发生频率,我们在主页主体中添加了一个 1x1px 图像,以与主页 html 相同的方式提供。然后,我们编写了一个脚本,扫描 nginx 日志并检查每个主页请求是否在主页请求后的 10 秒内从同一 ip 发出了 1px 图像请求。
结果令人震惊——大约 30%(!!)的主页请求没有对近距离图像的请求,这是在过滤掉明显的搜索机器人等的请求之后。许多此类请求甚至来自高质量来源,即访问者很可能至少希望在离开网站之前查看呈现的主页……
因此,我强烈怀疑存在某种技术问题导致许多请求失败。
我该如何解决这个问题?
答案1
如果没有更多细节的话很难给出具体的建议,但以下是一些可能有用的一般性评论:
- 尝试在检查中使用超过 10 秒的时间。您的页面有时可能需要超过 10 秒的时间来加载/呈现,这会导致一些误报。不过,超过 10 秒的页面加载时间是您应该解决的另一个问题。
- 尝试使用站点基准测试标记,如 ApacheBench(随 Apache 安装)或 Siege,看看是否可以复制该问题。例如,使用 ApacheBench,我会查看“失败请求”和“写入错误”字段,对于运行良好的服务器/应用程序,这些字段应该为 0。尝试在服务器上和远程客户端上进行本地测试,以及使用不同的并发级别进行测试。
- 上一步还应为您提供系统的大致服务容量。检查以确保您的常规流量未接近此水平。如果您只能处理每秒 10 个请求,则超过此水平的任何请求都可能导致请求丢失或错误。
- 检查各种日志中是否有明显的错误或警告消息(nginx、数据库、应用程序、系统等)。如果未使用它们,请启用它们。如果您没有看到任何相关消息,请尝试暂时增加日志记录级别几天。
- 使用 Zabbix 或 Nagios 等工具查看系统监控。有很多系统可供选择。请参阅这个问题或者这个问题举几个很好的例子。这些通常不会告诉你问题出在哪里,但在调试问题时非常有用,而且一旦找到问题,它们还会在问题发生时通知你。
- 如果你确定有问题但找不到,请尝试更改参数并重新测试。尝试加载或不加载不同内容的不同页面。尝试动态/静态页面。尝试使用 lighttpd/Apache 而不是 nginx(至少用于测试)。
- 如果仍然找不到任何内容,请确保存在问题。您的测试方法可能表明存在与您认为的不同的问题(例如,页面加载缓慢或禁用图像的客户端)。
答案2
我不熟悉 nginx,但这听起来像是一个最大连接数问题。
快速谷歌搜索告诉我,“worker_connections”用于设置 worker_process 允许同时连接的数量。您可以随时尝试将当前数字增加一倍或三倍。
就像我说的,我对 nginx 完全不熟悉,所以我可能对此有误解,但值得一试。