我一直在一台相对较新的笔记本电脑上使用 Vagrant/virtualbox,该笔记本电脑具有不错的规格(16GB 内存、Intel i7 4710HQ cpu、双 m-sata SSD)。
到目前为止,对于我运行的每个来宾,我都会遇到非常高的延迟,通过 SSH 进行的击键会在几秒钟后回显。 (我确实通过反向 DNS 查找和 GSSAPI 身份验证检查了常见的 SSH 连接问题,它们不适用,只会影响初始连接。)
同时(以及在其他随机时间)一个核心将旋转至 100% 利用率,这全部由 VBoxHeadLess 内部消耗select()
。
$ ps -o time -p 5257; time sudo strace -c -p 5257 ; ps -o time -p 5257
TIME
00:23:51
Process 5257 attached
^CProcess 5257 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.95 3.214696 128588 25 select
0.03 0.000822 29 28 read
0.02 0.000521 23 23 futex
0.01 0.000413 21 20 sched_yield
------ ----------- ----------- --------- --------- ----------------
100.00 3.216452 96 total
real 0m3.81s
user 0m0.00s
sys 0m0.01s
TIME
00:23:55
$ ps -fp 5257
UID PID PPID C STIME TTY TIME CMD
henk 5257 25788 45 16:34 ? 00:18:20 /usr/lib/virtualbox/VBoxHeadless
注意ps -o time
输出:
00:23:51 (before)
00:23:55 (after)
结合time ...
3.81s 的结果,这证实了该进程实际上将所有时间都花在内核中,只是等待事件。
同时,主机内核似乎正在旋转锁以解决该问题select()
。
我在一台更普通的 i5 笔记本电脑上使用了 virtualbox/vagrant,具有相同的 ubuntu 14.04,但从未见过这种行为。
问题:
- 我怎样才能更深入地找出这里cpu浪费过多的原因呢?
- 有人熟悉同样响应缓慢的 virtualbox 客户端吗?
更新
重新启动后,我无法毫无问题地运行我的盒子。可能的解释:我可能已经安装了内核更新而没有重新启动。
我还消除了虚拟化模块冲突的潜在问题。昨天我确实从内核中删除了 kvm 模块,但没有任何改进。今天,模块在重新启动后恢复正常,但对 vbox 性能没有影响。