Articles of 独angular兽

独angular兽的工作者正在死亡

昨晚在午夜左右,我们的应用程序崩溃了,我试图确定为什么。 我们目前在EC2上有一个nginx前端服务器和2个独angular兽工作者(app)服务器。 我们麒麟的工作人员几乎不停地计时,因此被主人重新启动。 从我所看到的,我们现在没有crontabs或任何设置运行,所以我有点难住。 当我醒来(经过6个小时的宕机)之后,我杀死了独angular兽进程并重新执行了独angular兽二进制文件,于是我能够在今天早上得到这个应用程序。 (unicorn_rails -c unicorn.rb等) 任何想法在哪里看? 事实上,这两个应用程序服务器宕机让我觉得它可能是数据库(RDS)? 日志填满了以下(6小时..等); E, [2013-02-28T00:07:40.367981 #11097] ERROR — : worker=2 PID:26941 timeout (31s > 30s), killing E, [2013-02-28T00:07:40.468495 #11097] ERROR — : reaped #<Process::Status: pid 26941 SIGKILL (signal 9)> worker=2 I, [2013-02-28T00:07:40.756724 #28319] INFO — : worker=2 ready E, [2013-02-28T00:07:44.519818 #11097] ERROR — : worker=1 PID:11292 timeout […]

ELB后面的独angular兽,没有nginx

如果我了解Unicorn的权利(特别是他们的哲学文档 ),那么Unicorn似乎真的被devise成在像nginx这样的反向代理之后运行。 我的问题是:我可以从我的HTTP堆栈中删除nginx,考虑到我们顶部有一个ELB作为反向代理吗? 我在初始testing中没有发现任何问题,只是想知道有没有人在这方面有经验。

启动Unicorn时不允许操作

我已经在Ubuntu(Amazon EC2)上创build了一个nginx / unicorn / capistrato安装程序,主要遵循本指南 。 我猜一切都是应该设置的,但是当我启动Unicorn时,我在日志中得到了这个错误(很多): E, [2012-09-08T08:57:20.658092 #12356] ERROR — : Operation not permitted (Errno::EPERM) /home/deployer/apps/bridgekalenderen.no/shared/bundle/ruby/1.9.1/gems/unicorn-4.3.1/lib/unicorn/worker.rb:82:in `initgroups' 我看到它与用户的权限有关,但我无法弄清楚我所遗漏的内容。 服务器启动很好,如果我用sudo(或者rvmsudo,真的)启动它。 用户具有sudofunction,我已经chmod了几次应用程序,所以文件权限应该没问题。 / tmp中的独angular兽套接字由部署者用户拥有,所以不应该成为问题。 有人有线索在哪里看? 更新: 经过一番挖掘,我发现它归结为一个调用Process.initgroups抛出EPERM。 我已经通过irbvalidation了这一点。 我无法弄清楚是什么原因导致了错误。 用户可以读取/etc/group 。

如何定义不同的停止/重新启动信号

我开始将我们所有的系统转换成使用新贵来pipe理我们的各种应用程序。 我总是缺less的一件事就是能够在stop或restart事件时向进程发送不同的信号。 比如,我们用Unicorn运行我们的web进程。 独angular兽有一个很好的信号处理API。 当我想优雅地重新加载进程时,我发送一个USR2信号的主要PID。 为了优雅地closures它们,我发送一个QUIT命令。 TERM(upstart的默认停止信号)构成立即closures。 另一个例子是使用Resque 。 为了优雅地closures工人,我发送了QUIT信号。 TERM信号再次导致立即closures,无论工人的孩子是否分叉。 新贵支持自定义信号吗? 我似乎无法在任何地方find它,这使我担心我正在使用“错误的工具”。

每个CPU独angular兽进程的最佳数量

我们正在Unicorn下运行一个Ruby on Rails web应用程序。 我们的应用程序不是严格限制CPU(我们有一个双核Xeon E5645系统,12个内核,峰值负载平均值大约是6)。 我们最初从40个独angular兽工作人员开始,但随着时间的推移,应用程序内存占用增加 所以,现在我们必须减less工作进程的数量。 我认为标准(CPU核心数+ 1)公式也适用于Unicorn,但是我的同事试图说服我,我们应该为每个CPU预留更多的Unicorn实例并提供这个链接 。 然而,我不确定为什么我们需要在闲置的Unicorn进程上花费太多的内存。 我的问题是:每个CPU核心有多个Unicorn实例的原因是什么? 这是由于独angular兽的一些build筑特性吗? 我知道繁忙的Unicorn进程不能接受新的连接(我们正在使用UNIX域套接字与Unicorn实例进行通信),但是我认为积压是为了解决这个问题。 无论如何,是否有可能为每个CPU规则克服2至8个独angular兽实例?

需要增加nginx吞吐量到上游的unix套接字 – linux内核调优?

我正在运行一个nginx服务器,充当上游unix套接字的代理,如下所示: upstream app_server { server unix:/tmp/app.sock fail_timeout=0; } server { listen ###.###.###.###; server_name whatever.server; root /web/root; try_files $uri @app; location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } } 一些应用程序服务器进程反过来将请求从/tmp/app.sock提取出来。 这里使用的特定应用程序服务器是Unicorn,但我不认为这与这个问题有关。 问题是,似乎只是经过了一定的负载,nginx无法以足够快的速度通过套接字获取请求。 不pipe我设置了多less个应用程序服务器进程, 我在nginx错误日志中收到了这些消息的洪水: connect() to unix:/tmp/app.sock failed (11: Resource temporarily unavailable) while connecting to upstream 许多请求导致状态码502,而那些需要很长时间才能完成的请求。 […]