我正在使用在 Ubuntu 上运行的 Apache 服务器来为内部 Web 应用程序提供服务。当服务器仅连接到本地网络时,它运行得很快。当我让它接受来自互联网的传入请求时,它变得非常慢,尽管访问日志显示它没有收到比仅连接到本地网络时更多的请求。这两种设置之间的唯一区别是,在第二种设置中,我让路由器将端口 80 转发到服务器。什么可能导致这样的速度变慢,我该如何防止它?
编辑:即使有零客户端从互联网连接。此外,该网站总共只有 4 个用户,每个页面请求都服务于一个 html 页面、一个图像和一个非常小的 CSS 文件。
答案1
一个可能的原因是 Apache 服务器启用了“HostnameLookups”。这不会对本地网络造成延迟,但当从外部进行访问时可能会造成轻微延迟,因为它必须向名称服务器发送更多请求。
答案2
您的服务器是否对所有用户都变慢,还是只有通过互联网连接的用户变慢?这些用户是否恰好是互联网另一端的移动用户?
是的,您的互联网用户完全有可能拖慢整个主机的速度。假设您从连接的网络到服务器的链接速度为 30 毫秒,但来自外部用户的连接速度为 300 毫秒(平均)。与服务器的握手、发送数据、接收数据等将花费十倍的时间……堆栈的中断服务是有代价的,因为它是系统的最高优先级,导致应用程序在处理此高优先级网络活动时等待。让堆栈更长时间地忙碌,您将让 CPU 更长时间地忙于服务堆栈,从而导致其他所有用户的 CPU 更少。如果有大量本地用户访问您的网站,这种降级效果可能会特别明显。
您可以做以下一些事情:
简而言之,当您不得不花费大量时间为慢速链接用户提供网络中断服务时,big_site+small_pipe 会导致所有人的性能不佳。