当我在AWS中的Cloud Foundry发布应用的时候,下面的Staging错误出现了。

2016-08-23T16:12:13.59+0000 [DEA/0] OUT Got staging request for app with id 71e82161-f1e8-408f-bd0f-fe8701284e83  
2016-08-23T16:12:13.64+0000 [API/0] OUT Updated app with guid 71e82161-f1e8-408f-bd0f-fe8701284e83 ({"state"=>"STARTED"})  
2016-08-23T16:12:16.05+0000 [API/0] ERR Encountered error: Stager error: failed to stage application:  
2016-08-23T16:12:16.05+0000 [API/0] ERR Failed setting cpu shares: No such file or directory @ rb_sysopen - /tmp/warden/cgroup/cpu/instance-19qntmnpnj1/cpu.shares  

我运行bosh ssh登录到其中一个Runner虚拟机,运行sudo su -以及ls /tmp/warden/cgroup来查看到底发生了什么。我发现在cgroup路径里竟然什么文件都没有!我一时不知道从哪里着手进行调试,因为我觉得问题出在Warden本身,而我对Warden内部代码并不熟悉。我在CF的slack中找到#runtime-org组进行求助,Dan Lavine和Sandy Cash很给力,他们告诉我可以从warden/root/linux/setup.h开始调试。

在代码里神游了一番,我发现问题所在是因为Control Group的文件系统在虚拟机重启之后没有得到正常的初始化。我为了给我们公司节约成本,每天下班我都会关掉AWS中的虚拟机,第二天早上再开启(我估计大多数人不会这么干的),正是这个过程让我发现了这个Warden系统中的漏洞。

我很开心能够在CF社区得到帮助,再次感谢Dan Lavine和Sandy Cash的帮助,并且Merge了我的Pull Request.

如何解决这个漏洞的详细信息,请见Pull Request.

To read the English version, please see Debugging a cf push 'Failed setting cpu shares' Stager Error.