【问题标题】:Basic server optimization – Slow server with 1 connection基本服务器优化 - 1 个连接的慢速服务器
【发布时间】:2015-01-09 16:16:44
【问题描述】:

我的服务器运行速度非常慢......除了我自己之外根本没有流量。我正在使用 Nginx 代理 Unicorn 服务器。我对服务器优化知之甚少。第一次加载时间总共13秒到第二次10秒。

网络:

http://i.imgur.com/AVaFlUF.png

http://i.imgur.com/qFVOUWr.png

http://i.imgur.com/OS4mYVM.png

什么方法可以让我把头发剃掉 10 秒?

注意:资产尚未预编译。

编辑:如果我将 Nginx 从进程中删除并直接提供给 Unicorn,我将缩短到 1.72 秒。看起来 Nginx 是罪魁祸首。我仍然不知道为什么 Nginx 让我这么慢。

【问题讨论】:

    标签: ruby nginx sinatra server unicorn


    【解决方案1】:

    你需要找出瓶颈在哪里。仅通过网络图很难猜测,但您应该检查系统中的以下级别:

    • 操作系统级别 - 如果它有足够的资源:处理器使用率、平均负载、内存(系统交换吗?)
    • 数据库级别 - 很可能出现瓶颈,因为您的问题只有 1 个会话;跟踪和检查数据库运行的查询并调整它们(索引、统计信息,取决于数据库服务器);在应用服务器运行时检查数据库锁
    • 应用程序服务器级别 - 嗯,这取决于应用程序本身,但最好检查它正在运行的代码;也许它正在等待某些东西,比如来自外部系统的响应?

    【讨论】:

    • 感谢您的意见。我只是尝试直接连接到端口 3000(我正在运行 Unicorn 服务器)。加载时间现在总共为 1.72 秒。这比 13 秒有所下降……所以,我认为可以公平地说 Nginx 的代理是瓶颈?
    • 那会很奇怪——它只是一个代理,它只是传输一个请求,所以它应该很快。这种行为是否重复?这可能是巧合(第一个请求很慢,第二个请求更快,因为缓存已满等)。我在想什么,也许 DNS 解析很慢?
    • 因为这是一个配置问题,我想如果没有正确的配置,Nginx 会搜索所有的套接字,直到找到一个连接——这可能解释了延迟?
    • 是的,这可能是一种解释
    【解决方案2】:

    好吧……

    瓶颈确实是由于 Nginx 或者更确切地说是 Nginx 和 Unicorn 之间的相互作用。直到我让 Unicorn 和 Nginx 在各自的配置文件中就一个套接字达成一致后才解决。

    独角兽需要这个:

    listen ENV["UNICORN_PORT"].to_i || 4567, :tcp_nopush => true
    listen "#{@dir}tmp/sockets/unicorn.sock", :backlog => 64
    

    而 nginx 需要一个指向套接字的上游配置。

    upstream unicorn_server {
        server unix:/home/user/someapp/tmp/sockets/unicorn.sock
        fail_timeout=0;
    }
    

    服务器首次响应时间现在缩短到 1-2 秒。

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多