VestaCP面板载入响应缓慢问题解决

2018-02-05 10:31:30来源:https://www.kaijia.me/2018/02/vestacp-slow-response-loading-作者:Kaijia人点击

分享

今天小伙伴向Kaijia反映万年没有动的VestaCP面板突然间响应缓慢,Kaijia登录检查发现每次点击VestaCP面板中任意功能,均需要等待3~5秒时间才能响应,而同时间服务器并无高负载、高IO情况,VestaCP管理下的网页亦可飞速打开。



为了找到延时原因,Kaijia在/usr/local/vesta/php/etc/php-fpm.conf
开启了VestaCP的慢执行日志(slow log),获得以下记录:


[03-Feb-2018 23:00:54]  [pool www] pid 2721script_filename = /usr/local/vesta/web//list/web/index.php[0x00007f8ead529798] exec() /usr/local/vesta/web/list/web/index.php:9
[03-Feb-2018 23:01:03]  [pool www] pid 2721script_filename = /usr/local/vesta/web//list/web/index.php[0x00007f8ead529708] shell_exec() /usr/local/vesta/web/list/web/index.php:12


再返回查看代码,显示所有的慢执行均发生在exec()
shell_exec()
函数调用VestaCP CLI管理脚本时。



调用问题代码简化为
shell_exec
(
VESTA_CMD
.
"v-list-web-domains $user json"
)
;

,其中
define
(
'VESTA_CMD'
,
'/usr/bin/sudo /usr/local/vesta/bin/'
)
;

。即VestaCP通过PHP运行了
/
usr
/
bin
/
sudo
/
usr
/
local
/
vesta
/
bin
/
v
-
list
-
web
-
domains

,而造成响应缓慢的问题便出在此处。



VestaCP面板的网页进程以admin
用户运行,然而要执行VestaCP CLI命令管理系统必须拥有root
,因此每当调用CLI时,必会像上例中所示,使用sudo
提升权限。然而sudo
设计支持利用主机名(hostname)指定权限(详见/etc/sudoers
),因此
每次运行sudo
实际上产生了一次DNS查询
。通常情况下,主机名会存在于/etc/hosts
中,因此并不会产生延误,但是当/etc/hosts
无主机名记录时,查询便会转发给DNS服务器,从而使sudo
命令产生延迟。



以前Kaijia并没有在意到这一点,直到今天DNS系统抽风每次查询均要3~5秒时间响应,因此对exec()
执行的sudo
产生了可感觉的延误,在界面上反映成响应缓慢。因此解决方法非常简单——将VestaCP使用的域名添加到/etc/hosts
即可。



最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台