如何监控Puma服务器?

27

有没有一种方法可以监控puma服务器的状态?尤其是它有多少繁忙的工作进程和每个工作进程分配了多少线程。最好类似于apache的mod_status,提供类似这样的信息。

3个回答

20

或许

$ touch /path/to/your/stats.txt
$ puma -S /path/to/your/stats.txt

在另一个终端中。
$ watch cat /path/to/your/stats.txt

结果为:

---
pid: 14364
config: !ruby/object:Puma::Configuration
  cli_options: 
  conf: 
  options:
    :min_threads: 0
    :max_threads: 16
    :quiet: false
    :debug: false
    :binds:
    - tcp://0.0.0.0:9292
    :workers: 0
    :daemon: false
    :mode: :http
    :before_fork: []
    :worker_timeout: 60
    :worker_boot_timeout: 60
    :worker_shutdown_timeout: 30
    :state: /path/to/your/stats.txt
    :config_file: 
    :control_auth_token: 21c9241912a8e0e7ddaabac667ff5682
    :tag: solar
    :environment: development

但那看起来很静态 :(

通过像这样使用 Puma 启动您的应用程序:

$ puma -S /path/to/your/stats.txt -C config/puma.rb --control tcp://0.0.0.0:9191 --control-token foo config.ru

这允许您稍后通过您的网络浏览器进行查询:

$ http://localhost:9191/stats?token=foo
or
$ pumactl -C tcp://0.0.0.0:9191 -T foo stats

导致:
{ "workers": 3, "phase": 0, "booted_workers": 3 }

哪个看起来更动态...

编辑_0:

由于工作人员是进程,因此可以利用操作系统提供的工具收集信息,例如在Linux上:

启动Puma实例:

puma -S p/stats.txt -C config/puma.rb --control tcp://0.0.0.0:9191 --control-token foo config.ru 
[1908] Puma starting in cluster mode...
[1908] * Version 2.15.3 (ruby 2.1.5-p273), codename: Autumn Arbor Airbrush
[1908] * Min threads: 8, max threads: 32
[1908] * Environment: development
[1908] * Process workers: 3
[1908] * Preloading application
[1908] * Listening on tcp://0.0.0.0:9292
[1908] Use Ctrl-C to stop
[1908] * Starting control server on tcp://0.0.0.0:9191
[1908] - Worker 0 (pid: 1921) booted, phase: 0
[1908] - Worker 1 (pid: 1929) booted, phase: 0
[1908] - Worker 2 (pid: 1937) booted, phase: 0

使用 top 命令来查看工作进程:

$ top -p1921 -p1929 -p1937 -n 1

提供了

Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  8.4 us,  1.5 sy,  0.0 ni, 88.9 id,  1.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   4058820 total,  1626576 used,  2432244 free,    56456 buffers
KiB Swap:  9609212 total,        0 used,  9609212 free.   424948 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
 1921 benjamin  20   0 1171600  85484   3116 S   0.0  2.1   0:00.38 puma        
 1929 benjamin  20   0 1171600  85264   2884 S   0.0  2.1   0:00.37 puma        
 1937 benjamin  20   0 1171600  85264   2884 S   0.0  2.1   0:00.42 puma

可以从中解析出相关信息,例如CPU或RAM利用率。


@Tal,在 Puma 版本 2.15.3 中,调用 "puma --help" 将显示简短的文档。我会更新我的答案以展示给你内容... - benjamin
谢谢@本杰明,但不幸的是,它似乎没有提供我正在寻找的关键信息,即工人的状态(忙碌/空闲)。 - Tal
@Tal,我已经更新了答案,新的部分从Edit_0开始。但也许https://github.com/hired/puma-stats-logger适合你? - benjamin
1
谢谢@benjamin,没错。这将(终于!)呈现出puma线程的数量以及哪个是活动的,哪个是空闲的信息。谢谢!只希望有一种方法可以知道它们当前正在处理哪个URL(就像Apache的mod_status)。 - Tal
请注意,您可以从 Puma 版本 3.7.1 中的统计信息中获取线程使用情况。https://github.com/puma/puma/pull/891/ - lingceng

4

我使用god或monit。

God 是一个 Ruby gem,Monit 是一款监控工具。

  • 可以监控服务器、
  • 进程,
  • 针对资源使用情况发送通知,
  • 如果进程崩溃,则重启您的进程,
  • 提供终端和 Web UI 以检查进程状态。

0

您可以使用 pumactl 工具:

$ pumactl --help

3
谢谢Yuri,但这不能让我监控工人/线程的数量,这正是所需的。我有什么遗漏吗? - Tal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接