【问题标题】:Why does my WEBrick server get killed?为什么我的 WEBrick 服务器会被杀死?
【发布时间】:2014-01-22 19:03:03
【问题描述】:

我有一个在 Ubuntu 12.04 上的 DigitalOcean 中运行的 Rails 开发环境,但我的 WEBrick 进程在几个小时后一直被“杀死”。我找不到任何会导致这种情况的设置或配置。

控制台输出示例:

user@machinename:~/git/app$ rails s
=> Booting WEBrick
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2014-01-05 09:14:29] INFO  WEBrick 1.3.1
[2014-01-05 09:14:29] INFO  ruby 2.0.0 (2013-11-22) [x86_64-linux]
[2014-01-05 09:14:29] INFO  WEBrick::HTTPServer#start: pid=23452 port=3000


Started GET "/" for x.x.x.x at 2014-01-05 09:14:37 +0000
Processing by FunController#welcome as HTML
...

服务器和应用程序在我使用时运行良好。但是,在某些时候,我的服务器将停止工作。而且,我将查看控制台以查看来自 WEBrick 的输出:

Killed

然后把我踢回壳里。任何想法是什么原因造成的?

【问题讨论】:

  • 您确定只使用 webrick 吗?为什么不试试瘦呢?
  • 这可能是数字海洋的限制。或者您的互联网连接不稳定。
  • 另外,我在 tmux 中运行它,所以无论我是否连接到机器,进程都在运行。 (感谢@phoet 指出这一点)。
  • @arun15thmay 我愿意使用瘦。但是,我想先了解为什么会这样。
  • 所以你在远程服务器上通过 ssh 运行rails c?我打赌 ssh 会话将被终止/超时,因此会话中的所有进程也会被杀死。

标签: ruby-on-rails ruby-on-rails-3 ubuntu webrick digital-ocean


【解决方案1】:

内存不足。 linux内核杀死了它。默认情况下,Droplet 不附带任何“交换”,因此当内存已满时,它会杀死一个进程或不允许您启动一个新进程。有点疯狂。

这里有一篇文章指导您添加交换文件:

https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04

注意:即使在“swappiness”设置为 0 时添加交换文件后,编译器进程被“杀死”仍然存在一些问题。将其提高到 20 可以解决问题。

注意2:你真的不应该像其他人在 cmets 中提到的那样在生产中使用 webrick。不过,问题就是问题:)

【讨论】:

  • 这似乎是一个非常合理的答案。我刚刚实现了一个交换文件,并使用ab 进行了一些负载测试,看看我是否可以让它崩溃,并且它一直保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多