使用 webbrick 服务器的 ruby​​-on-rails 应用程序在某些机器上运行缓慢

使用 webbrick 服务器的 ruby​​-on-rails 应用程序在某些机器上运行缓慢

我有一个在 Mac 上开发的相当简单的 ruby​​-on-rails 应用程序,该应用程序已在 Debian Web 服务器上投入生产。该 Web 应用程序使用提供的默认 webbrick 服务器来运行该应用程序。

该应用程序在我的机器以及我所在地区的许多其他机器上运行速度很快。但是,它在几台机器上运行缓慢。根据 webbrick 提供的日志,页面在几毫秒内呈现,但在速度较慢的机器上,机器需要 15 - 20 秒才能收到消息并实际呈现页面。

我研究过可能导致此问题的所有可用解决方案,但没有一个能为我的情况提供可行的解决方案。

现在,我正在考虑将我的服务器切换到 Apache 来运行我的应用程序,但我不确定同样的问题是否会持续存在,因为我真的不知道问题是什么!有人有什么建议吗?


有关我测试过的机器的一些信息:

3 台 Mac Pro(Mac OSX)——全部运行应用程序速度很快。计算机连接在我们的用户网络内

1 Mac Air (Mac OSX) - 运行速度快。已连接我们的网络

1 Macbook Pro (Mac OSX) - 运行速度相当慢,但不是最慢的。未连接到我们的网络

1 台戴尔笔记本电脑(Ubuntu) - 性能与 Macbook Pro 相同

1 台戴尔工作站(Windows) - 速度最慢。页面延迟时间长。连接网络内部。这是我们需要速度快的机器。

1 台戴尔台式机(Windows) - 另一台运行缓慢的机器。已连接我们的网络

答案1

问题是不是在于,在您的开发机器上,服务器只接受一个请求,而在生产中却接受多个并发请求?

无论如何,Webrick 不是适合生产环境的良好服务器。我更喜欢 Unicorn 或 Puma,但 Passenger 也是一个不错的选择,而且配置更简单。

答案2

由于您的应用程序在多个工作站上运行,因此,运行缓慢很可能是由于问题工作站上的问题造成的。

我假设您的应用程序在每台机器上都能一致运行 - 也就是说,在运行速度快的机器上,它总是能快速运行。

运行该应用的计算机与不运行该应用的计算机在计算机硬件、操作系统、软件和网络方面有何不同?如果运行该应用的计算机全都在不同的子网上,则该子网上可能存在路由问题或网络拥塞严重。如果它们运行的​​是较旧的操作系统或较旧的浏览器,则可能与应用中的代码不完全兼容。如果它们正在运行其他后台任务或 RAM 或可用磁盘空间较少,请解决这些问题并重试。

网页设计中有很多变量会影响性能,但就你的情况而言,我认为迹象表明这是客户端问题,而不是服务器问题。当然,任何开发人员都知道代码总是可以得到更好的优化。即使这是客户端问题,应用中更优化的代码也可能会提高这些客户端的性能。请前往 SO 寻求帮助。

如果您的应用在每台机器上运行不一致 - 如果它以前在某台机器上运行得很快,但在它运行得却很慢 - 那么可能存在服务器问题需要解决。在这种情况下,请检查您的 CPU、RAM 和网络使用情况,并将其与您的应用性能缓慢联系起来。您的网络服务器可能正在快速处理应用,但在交付时遇到瓶颈。您可以随时在 Apache 上尝试,看看是否能解决您的问题(Apache 是免费的,而且设置起来相对容易,因此使用它进行测试并不难)。

相关内容