You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署时旧Puma进程未终止,资源占用过高求助

Puma部署后旧进程未关闭导致资源占用过高问题

执行新部署时,新的Puma实例正常启动,但旧进程并未关闭,导致服务器资源被大量占用。检查部署脚本后未发现明显问题。

我使用mina gem进行部署,部署流程包含两个文件:

  1. bin/deploy 文件:
# bin/deploy file
system "mina deploy"
system "mina puma:stop"
system "mina puma_clean"
system "mina puma:start"
  1. mina deploy.rb 文件:
# mina deploy.rb
require 'mina/rails'
require 'mina/rvm'
require 'mina/puma'
require 'mina/whenever'
require 'mina/git'

# -- Basic settings:
set :application_name, 'app'
set :user, 'app'
set :domain, '8.8.8.8'
set :deploy_to, '/var/www/app'
set :repository, 'git@github.com:repository.git'
set :branch, 'master'
set :rails_env, 'production'

# -- RVM
set :rvm_use_path, "/usr/local/rvm/scripts/rvm"
task :remote_environment do
  invoke :'rvm:use', 'ruby-3.1.2'
end

# -- Shared Dirs
set :shared_dirs, fetch(:shared_dirs, []).push(
  'pids','log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle',
  'public/system', 'public/assets', 'public/packs', 'node_modules'
)
set :shared_files, fetch(:shared_files, []).push('config/database.yml')

# -- Setup
task :setup do
  command %{rvm install ruby-3.1.2}
  command %{gem install bundler}
end

# -- If puma thinks it's running but ain't
task :puma_clean do
  command "rm /var/www/app/shared/tmp/sockets/puma*"
end

desc "Deploys the current version to the server."
task :deploy do
  invoke :'git:ensure_pushed'
  deploy do
    command %(source ~/.profile)
    command %(source ~/.nvm/nvm.sh)
    command %(nvm use 18.12.1)
    command %(node -v)
    command %(ruby -v)

    invoke :'git:clone'
    #invoke :'sidekiq:stop'
    invoke :'deploy:link_shared_paths'
    invoke :'bundle:install'
    invoke :'rails:db_migrate'
    invoke :'rails:assets_precompile'
    invoke :'deploy:cleanup'

    on :launch do
      in_path(fetch(:current_path)) do
        command %(source ~/.profile)
        
        invoke :'puma:restart'

        invoke :'whenever:update'
        
        command %{mkdir -p tmp/}
        command %{touch tmp/restart.txt}
      end
    end
  end

  run(:local){ puts 'Done!' }
end

即便使用上述脚本,服务器上仍存在多个Puma进程(截图显示有多个puma相关进程在运行)。我已尝试查找能在部署时终止Puma PID的命令但未成功,恳请帮助。

补充说明:
部署时执行mina puma:stop命令,终端输出如下:

-----> Using RVM environment "ruby-3.1.2"
       Using /usr/local/rvm/gems/ruby-3.1.2
-----> Stopping Puma...
       Puma is not running!
       Connection to 8.8.8.8 closed.

       Elapsed time: 2.14 seconds

我在mina puma仓库中未找到“Puma is not running!”这条提示,这是否意味着执行stop命令时无法终止旧Puma进程?

内容的提问来源于stack exchange,提问作者Thiago David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:00:10