![可能是一件简单的事情——Apache 速度慢](https://linux22.com/image/566413/%E5%8F%AF%E8%83%BD%E6%98%AF%E4%B8%80%E4%BB%B6%E7%AE%80%E5%8D%95%E7%9A%84%E4%BA%8B%E6%83%85%E2%80%94%E2%80%94Apache%20%E9%80%9F%E5%BA%A6%E6%85%A2.png)
我正在尝试使用 Apache 和 mod-wsgi 运行 Django webapp。每个页面都需要整整 10 秒钟才能加载。我已经排除了 MySQL 数据库(启用了慢速查询日志记录,它们都很快),所以我认为我的 DNS 设置存在问题。我的办公室里有服务器,我正尝试从同一个办公室局域网内访问 webapp。当我在 Django 测试服务器上运行 webapp 时,它的速度非常快,所以我确信这是 apache 或我的网络设置的问题。
我的主机文件如下所示:
127.0.0.1 localhost
127.0.1.1 localhost
192.168.47.140 RDCServer
192.168.47.140 app.my_domain.com
这app.my_domain.com
是 webapp 的子域名,主域名是位于 VPS 服务器(不同的 IP 地址)上的主网站
我究竟做错了什么?
答案1
确保您没有在嵌入模式下使用 mod_wsgi,尤其是使用 Apache prefork MPM 时。如果是这样,那么您可能会对每个请求都使用不同的进程,并且第一次加载 Django 时会遇到延迟。如果是这种情况,您可能会认为,在 Django 加载一段时间后,响应时间会下降。但这并不是绝对的,因为如果请求负载很轻,则根据您设置 Apache 的方式,Apache 可能会决定不需要您的进程并关闭它们,这意味着在空闲期之后的后续请求中,它会再次加载整个 Django。
确保您正在使用:
LogLevel info
在 Apache 配置中,这样 mod_wsgi 就会记录有关在进程中初始化 Python 以及首次加载 WSGI 脚本的信息。这至少可以帮助您消除这个问题。
更好的是,如果您对设置 Apache 或 mod_wsgi 不太了解,请使用 mod_wsgi 的守护进程模式,因为这将避免在为 Python Web 应用程序错误设置 Apache 时可能犯的许多错误。
答案2
感谢您的回复。我查看了您的建议,确定是我的服务器hosts
文件出了问题。我将路由器的 IP 地址添加到 myapp.my_domain.com,现在一切正常。
123.345.567.678 myapp.my_domain.com
这是一个糟糕的解决方案还是有意义的?
无论如何,它正在发挥作用。谢谢!
答案3
(您的问题的更好的标题是:如何诊断 Apache 每个页面花费 10 秒的时间?)
使用 chrome 的 web dev 工具来准确确定(从客户端的角度)哪里慢了。
如果是 Apache,请打开所有 Apache 调试并在前台运行它。这应该会给你更多关于它正在做什么的提示。
您是否遇到过静态资源服务延迟的情况?还是只有 WSGI 请求有延迟?
您需要先隔离问题,然后尝试通过反复试验来调试问题。
答案4
大多数时候,当网站无法正确加载时,简单和基本的诊断工具就是我们的浏览器。它会告诉您很多有关它对您让它处理和显示的网站所做的事情的信息。例如,在 chrome 浏览器中,当您输入网站地址后,按下回车键后,请留意 chrome 的状态栏。它可能会告诉您以下任何一项: - “等待 app.my_domain.com...” - “正在解析 app.my_domain.com”如果是第一种情况,那么它告诉我们您的 DNS 是 100% 健康的。如果它花了 10 秒钟才显示“正在解析....”则意味着 DNS 是罪魁祸首。
您可以在 forefox 或 chrome 中使用 Firebug,查看详细调试,了解究竟在哪里花费了这么多时间。