Phabricator pha 守护进程问题优化

phd

phabricator后台提供了几个守护进程用来做后台任务处理:

  • PhabricatorTaskmasterDaemon:执行任务队列里面的任务
  • PhabricatorRepositoryPullLocalDaemon:追踪代码仓库的进程
  • PhabricatorTriggerDaemon:事件触发调度,清理旧日志和缓存

可以通过 ./bin/phd help 对管理守护进程,详细管理文档请参考:Managing Daemons with phd

常用的命令:

  • ./bin/phd stop: 关闭守护进程;
  • ./bin/phd start: 开启守护进程;
  • ./bin/phd restart: 重启守护进程;
  • ./bin/phd status:查看正在运行的守护经常的状态;

Daemons应用

phabricator在管理后台应用列表里面提供了一个Daemons应用,可以通过这个应用查看守护进程的运行状态,包括活跃的进程,任务队列等。

进入daemon应用:

http://phabricator.example/daemon/

可以在服务器上面查看daemon日志:

/var/tmp/phd/log/daemons.log

相关问题

发现arc land提交代码之后,很久才再审查页面更新审查单子的状态,然后展示commit单子;另外提交代码审查之后,等了几十秒才触发Jenkins构建。

根据症状,应该是守护经常出了点问题。进入Daemons应用页面,发现任务队列里面有很多任务,并且执行时间比较长,查看daemon日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[27-Nov-2018 16:00:48 Asia/Hong_Kong] arcanist(), phabricator(), phutil()
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #0 <#2> PHPMailer::SmtpConnect() called at [<phabricator>/externals/phpmailer/class.phpmailer.php:689]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #1 <#2> PHPMailer::SmtpSend(string, string) called at [<phabricator>/externals/phpmailer/class.phpmailer.php:576]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #2 <#2> PHPMailer::Send() called at [<phabricator>/src/applications/metamta/adapter/PhabricatorMailImplementationPHPMailerAdapter.php:159]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #3 <#2> PhabricatorMailImplementationPHPMailerAdapter::send() called at [<phabricator>/src/applications/metamta/storage/PhabricatorMetaMTAMail.php:666]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #4 <#2> PhabricatorMetaMTAMail::sendWithMailers(array) called at [<phabricator>/src/applications/metamta/storage/PhabricatorMetaMTAMail.php:508]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #5 <#2> PhabricatorMetaMTAMail::sendNow() called at [<phabricator>/src/applications/metamta/PhabricatorMetaMTAWorker.php:22]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #6 <#2> PhabricatorMetaMTAWorker::doWork() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorWorker.php:123]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #7 <#2> PhabricatorWorker::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php:171]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #8 <#2> PhabricatorWorkerActiveTask::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php:22]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #9 PhabricatorTaskmasterDaemon::run() called at [<phutil>/src/daemon/PhutilDaemon.php:219]
[27-Nov-2018 16:00:48 Asia/Hong_Kong] #10 PhutilDaemon::execute() called at [<phutil>/scripts/daemon/exec/exec_daemon.php:131]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] [2018-11-27 16:00:52] EXCEPTION: (PhutilProxyException) Error while executing Task ID 122224. {>} (phpmailerException) SMTP Error: Could not connect to SMTP host. at [<phabricator>/externals/phpmailer/class.phpmailer.php:804]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] arcanist(), phabricator(), phutil()
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #0 <#2> PHPMailer::SmtpConnect() called at [<phabricator>/externals/phpmailer/class.phpmailer.php:689]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #1 <#2> PHPMailer::SmtpSend(string, string) called at [<phabricator>/externals/phpmailer/class.phpmailer.php:576]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #2 <#2> PHPMailer::Send() called at [<phabricator>/src/applications/metamta/adapter/PhabricatorMailImplementationPHPMailerAdapter.php:159]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #3 <#2> PhabricatorMailImplementationPHPMailerAdapter::send() called at [<phabricator>/src/applications/metamta/storage/PhabricatorMetaMTAMail.php:666]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #4 <#2> PhabricatorMetaMTAMail::sendWithMailers(array) called at [<phabricator>/src/applications/metamta/storage/PhabricatorMetaMTAMail.php:508]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #5 <#2> PhabricatorMetaMTAMail::sendNow() called at [<phabricator>/src/applications/metamta/PhabricatorMetaMTAWorker.php:22]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #6 <#2> PhabricatorMetaMTAWorker::doWork() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorWorker.php:123]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #7 <#2> PhabricatorWorker::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php:171]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #8 <#2> PhabricatorWorkerActiveTask::executeTask() called at [<phabricator>/src/infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php:22]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #9 PhabricatorTaskmasterDaemon::run() called at [<phutil>/src/daemon/PhutilDaemon.php:219]
[27-Nov-2018 16:00:52 Asia/Hong_Kong] #10 PhutilDaemon::execute() called at [<phutil>/scripts/daemon/exec/exec_daemon.php:131]

这个异常是由于服务器被限制访问外网,导致发送邮件一直报错。(邮件配置:Configuring Outbound Email)

那么我们关掉这个发送邮件功能,在settings里面做如下设置:

settings –> core –> Mail –> metamta.mail-adapter: PhabridatorMailImplementationTestAdapter

然后重启守护进程:./phd restart

Daemons页面任务队列里面已经清空了,活跃守护进程也正常。

提交处理恢复正常,提交完代码立刻可与触发后续构建动作。

References

Daemons queue usage is low leading to slow imports

arthinking wechat
欢迎关注itzhai公众号,欢迎关注itzhai公众号,获取更多最新的文章