问题:
在创建虚拟机的接口调用时(只涉及到nova-api那部分),逻辑是创建之前,检查网络资源,获取镜像信息,然后开始调用create_instance API。
现在前端发过来多个(7个或以上)请求,每一个请求最终一共会调用四次create_instance,请求之间的间隔在2s左右。问题在对日志的分析发现,create_instance函数的执行时间在整体上会逐渐增加。检查网络资源跟获取镜像的时间也在增加。导致返回时间超时(60s),前端放弃了等待。
![](https://img.haomeiwen.com/i13038082/bb2aa2773f9588af.png)
![](https://img.haomeiwen.com/i13038082/c954dc9fc308f20b.png)
![](https://img.haomeiwen.com/i13038082/99d54ba702fd8329.png)
![](https://img.haomeiwen.com/i13038082/4d8555cd1c175205.png)
这是最开始和最后的时候,两个函数的执行时间,可以明显发现时间的增长
思考:
Nova-api服务端是用Eventlet来启动的。并且会根据计算机核数来启动相应数量的子进程同时监听一个端口。进程之间的处理应该不会互相影响。所以我去检查了每次处理请求的pid,根据pid去查看一个进程的执行情况,发现create_instance时间依然在递增。
推测:create_instance的请求是同时下发的,但是因为同时只能有一个在执行,所以create_instance的执行时间虽然没多大变化,但是因为等待的时间也算进了函数执行时间,所以会递增。
验证:
我去检查了同一个pid下的执行过程,发现整个程序是串行执行的,每一次都是先获取镜像,执行create_instance,等create_instance执行完毕后,在获取下一个镜像,在执行create_instance。也就是说我的推测是错误的,请求并不是同时下发。
思考
所以现在可以发现一个终极问题,同样的create_instance的请求的执行时间为什么会不断增加??
2018.7.22更新
现在发现可能是硬件问题,因为在一个备有SSD的服务器上进行同样的操作的时候,并没有出现上述的问题。
网友评论