nova-conductor进程在运行时,其中单个进程会周期性的占用CPU 100%的使用率,周期大约2分钟。经调试和排查,发现缘由在于nova-conductor在履行某1数据库操作时,要求数据量巨大, 仅数据库查找耗时10s,返回数据大小在2MB。致使数据在进行序列化和解序列化时耗尽CPU,并延续时间较长。详情以下:
操作要求:object_class_action
要求参数:{u'objver': u'1.6', u'objmethod': u'get_by_filters', u'args': [{u'deleted': True, u'soft_deleted': False, u'host': u'node⑴44}], u'objname': u'InstanceList', u'kwargs': {u'use_slave': True}
功能:根据host信息查询该计算节点上所有已删除实例的信息,注意这里获得instance数据库信息的filter的deleted=True。这里是获得node⑴44计算节点上所有已删除实例的数据库信息,履行时间140.429696083s,其间CPU利用率基本处于100%。随着openstack系统的延续运行,数据库中的删除虚拟机信息将会愈来愈多,该数据查找操作也会继续变大,CPU耗时也将越长。node⑴44上进行创建删除的虚拟机较多,所以查询的时间最长,占用CPU 100%的时间也最长,对其它计算节点上的InstanceList查询会延续在10s左右。
要求者: nova-compute
履行该要求的函数(不完全统计):
上一篇 信息在网络中的漫游(二)