当连接到互联网时,Ubuntu Apache服务器变慢

我正在使用在Ubuntu上运行的Apache服务器来提供内部Web应用程序。 当服务器只连接到本地networking时,运行速度很快。 当我让它接受来自互联网的传入请求时,即使访问日志显示它没有收到更多的请求,也比只连接到本地networking时要慢。 这两个设置唯一的区别是,在第二个我有路由器转发端口80到服务器。 有什么可能导致像这样的放缓,我怎样才能防止呢?

编辑:即使有零客户端连接从互联网服务器是缓慢的。 此外,这个网站只有4个用户,每个页面请求服务一个HTML页面,一个图像,和一个非常小的CSS文件。

一个可能的原因可能是如果为Apache服务器启用了“HostnameLookups”。 这将导致本地networking无延迟,但是当从外部访问时可能会稍微延迟,因为它必须向名称服务器发送更多的请求。

您的服务器对所有用户来说是缓慢还是只有从互联网连接的用户? 这些用户是否偶然从互联网上移动用户?

是的,您的互联网用户完全有可能放慢您的整个主机。 假设从连接networking到服务器的链接速度是30毫秒,但与外部用户的连接速度是300毫秒(平均)。 这将花费十倍的时间与服务器进行握手,发送数据,接收数据等等。这个堆栈的中断服务带有价格标签,因为它是系统的最高优先级导致应用程序等待处理这个高优先级的networking活动。 保持堆栈的繁忙时间更长,并且保持CPU忙于更长的时间来处理堆栈,因此其他用户的CPU就会更less。 如果您有许多本地用户访问您的网站,则可能会特别明显地降低效果。

有一些事情可以做:

  • 减less握手事件。 如果您有多个样式表,请合并它们。 如果您有多个Javascript文件,请合并它们。
  • 向您的服务器引入压缩。 较小的文件需要较less的时间来传输
  • 拥抱有效的客户端cachingpipe理。 在减less初始握手后需要传输的文件数量方面发挥积极的作用。 即使您将caching的年龄设置为一周,您的静态内容请求级别也会大幅下降。 减less了请求=减less了服务器的开销。
  • 优化你的graphics。 你是否需要一个1500万色的graphics,只有256色。 优化的托盘导致较小的文件大小
  • 考虑一种不同的graphics格式,即使在压缩之前,其默认graphics尺寸也较小,如PNG
  • 内容分发? 您可以使用一些模型,包括使用前端caching设备来服务大多数负载的模型。 看看开放源代码前端(可以作为前端部署在托pipe服务提供商处)或任何类似AKAMAI服务的Squid。 甚至谷歌正在进入内容分发游戏
  • 简而言之,当你不得不为慢速链接用户花费那么多的时间来处理networking中断时,big_site + small_pipe是所有人性能差的秘诀。