Ruby on rails Rails应用程序Sidekiq内存使用率高

Ruby on rails Rails应用程序Sidekiq内存使用率高,ruby-on-rails,ruby,memory-management,sidekiq,Ruby On Rails,Ruby,Memory Management,Sidekiq,我在Digital Ocean上部署了一个Rails 4应用程序,使用Ubuntu 14.04.5 LTS。该应用程序似乎运行良好,但系统始终以95%的内存运行。我甚至将液滴升级到RAM的两倍,仍然是95% 以下是我的主要输出: top - 11:03:54 up 8:37, 1 user, load average: 0.00, 0.03, 0.05 Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie

我在Digital Ocean上部署了一个Rails 4应用程序,使用Ubuntu 14.04.5 LTS。该应用程序似乎运行良好,但系统始终以95%的内存运行。我甚至将液滴升级到RAM的两倍,仍然是95%

以下是我的主要输出:

top - 11:03:54 up  8:37,  1 user,  load average: 0.00, 0.03, 0.05
Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   2049956 total,  1980616 used,    69340 free,     8708 buffers
KiB Swap:  1048572 total,  1036928 used,    11644 free.    47864 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                               
 7510 ubuntu    20   0  780436 274428   2540 S   0.0 13.4   0:27.66 ruby                                                                                                                                                                  
 1313 root      20   0 1921472 250948   2700 S   0.0 12.2   1:42.70 bundle                                                                                                                                                                
 1315 root      20   0 1876992 246204   2664 S   0.0 12.0   1:44.10 bundle                                                                                                                                                                
 1359 root      20   0 1928636 236168   2692 S   0.0 11.5   1:42.58 bundle                                                                                                                                                                
 6408 ubuntu    20   0  781764 175368   2244 S   0.3  8.6   1:10.81 ruby                                                                                                                                                                  
 8681 ubuntu    20   0  984140 156708   1884 S   0.3  7.6   1:37.95 ruby                                                                                                                                                                  
 8810 ubuntu    20   0  646824 117356   2548 S   0.0  5.7   0:11.07 ruby                                                                                                                                                                  
 8821 ubuntu    20   0  646920 112728   2532 S   0.0  5.5   0:11.48 ruby                                                                                                                                                                  
 8797 ubuntu    20   0  646728  82372   2960 S   0.0  4.0   0:14.33 ruby                                                                                                                                                                  
 1932 ubuntu    20   0  332292  56948   1552 S   0.0  2.8   0:04.88 ruby
ubuntu@rails-01:~$ ps aux --sort=-%mem
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1291  8.8  9.4 846856 194624 ?       Sl   18:04   0:23 sidekiq 4.2.10 production [0 of 3 busy]                                                                                  
root      1411  8.9  9.4 846824 194532 ?       Sl   18:04   0:24 sidekiq 4.2.10 production [0 of 3 busy]                                                                                  
root      1272  9.1  9.4 712752 193516 ?       Sl   18:04   0:24 sidekiq 4.2.10 staging [0 of 1 busy]                                                                                  
ubuntu    2254  0.6  9.3 645792 192648 ?       Sl   18:05   0:01 Passenger RubyApp: /home/ubuntu/production/current/public (production)
ubuntu    1986  0.6  9.3 645048 192064 ?       Sl   18:05   0:01 Passenger RubyApp: /home/ubuntu/staging/current/public (staging)
ubuntu    1762  9.8  9.2 375520 190264 ?       Sl   18:04   0:24 Passenger AppPreloader: /home/ubuntu/production/current   
ubuntu    1678  9.5  9.2 374872 189588 ?       Sl   18:04   0:25 Passenger AppPreloader: /home/ubuntu/staging/current      
ubuntu    2082  0.2  9.1 645144 187524 ?       Sl   18:05   0:00 Passenger RubyApp: /home/ubuntu/staging/current/public (staging)
ubuntu    1839  2.9  3.9 197300 79976 ?        Sl   18:04   0:06 Passenger AppPreloader: /home/ubuntu/landing/current      
ubuntu    1962  0.1  3.8 332292 78720 ?        Sl   18:05   0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production)
ubuntu    1969  0.0  3.7 332388 76044 ?        Sl   18:05   0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production)
我知道有很多关于Rail应用程序内存优化的博客帖子等。这3个捆绑过程让我感到困惑。我的应用程序(实际上是两个应用程序-一个生产和一个登台)使用Redis/Sidekiq,这是捆绑流程。因此,我的问题是:

1) 这是‘正常’吗

2) 如果没有,是否有办法开始对此进行故障排除

更新

以下是最重要的输出:

top - 11:03:54 up  8:37,  1 user,  load average: 0.00, 0.03, 0.05
Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   2049956 total,  1980616 used,    69340 free,     8708 buffers
KiB Swap:  1048572 total,  1036928 used,    11644 free.    47864 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                               
 7510 ubuntu    20   0  780436 274428   2540 S   0.0 13.4   0:27.66 ruby                                                                                                                                                                  
 1313 root      20   0 1921472 250948   2700 S   0.0 12.2   1:42.70 bundle                                                                                                                                                                
 1315 root      20   0 1876992 246204   2664 S   0.0 12.0   1:44.10 bundle                                                                                                                                                                
 1359 root      20   0 1928636 236168   2692 S   0.0 11.5   1:42.58 bundle                                                                                                                                                                
 6408 ubuntu    20   0  781764 175368   2244 S   0.3  8.6   1:10.81 ruby                                                                                                                                                                  
 8681 ubuntu    20   0  984140 156708   1884 S   0.3  7.6   1:37.95 ruby                                                                                                                                                                  
 8810 ubuntu    20   0  646824 117356   2548 S   0.0  5.7   0:11.07 ruby                                                                                                                                                                  
 8821 ubuntu    20   0  646920 112728   2532 S   0.0  5.5   0:11.48 ruby                                                                                                                                                                  
 8797 ubuntu    20   0  646728  82372   2960 S   0.0  4.0   0:14.33 ruby                                                                                                                                                                  
 1932 ubuntu    20   0  332292  56948   1552 S   0.0  2.8   0:04.88 ruby
ubuntu@rails-01:~$ ps aux --sort=-%mem
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1291  8.8  9.4 846856 194624 ?       Sl   18:04   0:23 sidekiq 4.2.10 production [0 of 3 busy]                                                                                  
root      1411  8.9  9.4 846824 194532 ?       Sl   18:04   0:24 sidekiq 4.2.10 production [0 of 3 busy]                                                                                  
root      1272  9.1  9.4 712752 193516 ?       Sl   18:04   0:24 sidekiq 4.2.10 staging [0 of 1 busy]                                                                                  
ubuntu    2254  0.6  9.3 645792 192648 ?       Sl   18:05   0:01 Passenger RubyApp: /home/ubuntu/production/current/public (production)
ubuntu    1986  0.6  9.3 645048 192064 ?       Sl   18:05   0:01 Passenger RubyApp: /home/ubuntu/staging/current/public (staging)
ubuntu    1762  9.8  9.2 375520 190264 ?       Sl   18:04   0:24 Passenger AppPreloader: /home/ubuntu/production/current   
ubuntu    1678  9.5  9.2 374872 189588 ?       Sl   18:04   0:25 Passenger AppPreloader: /home/ubuntu/staging/current      
ubuntu    2082  0.2  9.1 645144 187524 ?       Sl   18:05   0:00 Passenger RubyApp: /home/ubuntu/staging/current/public (staging)
ubuntu    1839  2.9  3.9 197300 79976 ?        Sl   18:04   0:06 Passenger AppPreloader: /home/ubuntu/landing/current      
ubuntu    1962  0.1  3.8 332292 78720 ?        Sl   18:05   0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production)
ubuntu    1969  0.0  3.7 332388 76044 ?        Sl   18:05   0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production)
我忘了服务器上有2名生产工人和1名临时工。我在5和2时有并发性,但后来我将并发性降低到3和1。Sidekiq所做的只是一些低级上传图像处理和批量记录创建、更新和删除,我不希望用户坐在那里等待页面加载


我现在看到它稳定在80%。更好,但似乎仍然很高。我认为下一步将是大量的代码优化等。我相信我可以在这里找到很多东西。

Ruby进程可能会占用太多内存的原因有很多。任何gem或应用程序代码都可以分配任意数量的内存,所以一般来说,so不可能告诉您原因。这里有一个可能的原因:


密切关注您运行了多少Sidekiq进程、配置的并发性、轮询以及使用的队列数量。其中任何一个数量过多都会导致内存使用率过高。您可以在
sidekiq.yml
中调整这些值,并测试它们对环境的影响


有关更多信息:

您可以发布
ps au--sort=-%mem的输出吗?这将显示完整的命令,并确认那些
bundle
进程实际调用的内容。另外,您是否可以发布上一滴的
top
输出?这将有助于比较两种输出。我猜您的意思是
ps aux--sort=-%mem
这是最好的答案-我的代码会影响到这一点,但并发性是目前为止最大的一个。谢谢你。。。嗯。它立刻下降到80%,但现在慢慢地又恢复到95%,谢谢迈克-我知道我有很多清理/重构等工作要做,我相信这会有所帮助。