前些日子被内存泄露困扰,使用了一些办法。突然发现puma的版本用的还是3.x, 果断切换到最新的5.1.1
配置具体参考: https://github.com/puma/puma/blob/master/lib/puma/dsl.rb 看的时候,直接看方法定义即可。 例如
worker 1 的意思是啥,直接看上面 dsl.rb 的 def worker 方法即可。
启动方式:
bundle exec puma -C config/puma.rb ( 注意, puma 5 的启动,去掉了 puma start 的形式,而是直接 puma )
具体下面的配置文件,一定要看,跟puma3, puma4 最大的区别是, 不要使用 daemon true, 否则会报错。
另外,就是重启方式。 https://github.com/puma/puma/blob/master/docs/restart.md
# 完整的内容, 直接来这里看: https://github.com/puma/puma/blob/master/lib/puma/dsl.rb # puma 的最大和最小值 threads 1, 4 # 端口号 port 19000 # 运行环境, 默认是 development environment "production" #environment "development" app_dir = '/opt/app/new-admin/current' # 需要puma 运行时考虑的文件夹, 也就是rails, grape等的根目录 directory app_dir # config.ru 文件所在路径 rackup "#{app_dir}/config.ru" shared_dir = '/opt/app/new-admin/shared' # 需要多少个worker process 来运行,默认是0,对于主力应用,可以设置成cpu 核数 # workers 1 # 把当前server绑定到哪里。 tcp:// , unix:// 都可以。 bind "unix://#{shared_dir}/sockets/puma.sock" # 日志输出到哪里 stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true # pid 文件位置 pidfile "#{shared_dir}/pids/puma.pid" # state_文件位置 state_path "#{shared_dir}/pids/puma.state" # 这个属性在puma3, 4中都有, puma 5就没有了。 #daemonize true before_fork do ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) end on_worker_boot do ActiveRecord::Base.establish_connection if defined?(ActiveRecord) end
启动
bundle exec puma 就可以了。 默认读取 config/puma.rb
停止的话, kill 就可以了。
普通重启 (hot restart )
bundle exec pumactl restart
下面是 0 个worker 下的 重启,可以虽然发现 puma 5.1.1 主进程彻底重启了,但是进程的启动时间仍然在之前的时间 ( Dec17 )
checker 7318 10771 0 07:05 pts/6 00:00:00 grep --color=auto 21170 checker 21170 1 0 Dec17 ? 00:00:06 puma 5.1.1 (tcp://0.0.0.0:19000,unix:///opt/xxx/shared/sockets/puma.sock) [20201211071518]
不断线重启 phased-restart
bundle exec pumactl phased-restart -F config/puma5.rb (注意这里使用了 -F ,而不是 -C )
下面是 phased-restart 之后的输出例子,可以发现, cluster worker重启了, 主进程 (puma 5.1.1 ) 没有重启
checker 21170 1 0 Dec17 ? 00:00:02 puma 5.1.1 (tcp://0.0.0.0:19000,unix:///opt/xxx/shared/sockets/puma.sock) [20201211071518] checker 22598 21170 18 06:59 ? 00:00:04 puma: cluster worker 0: 21170 [20201211071518]