首页 > 代码库 > nova-conductor单个进程占用CPU 100%

nova-conductor单个进程占用CPU 100%

     nova-conductor进程在运行时,其中单个进程会周期性的占用CPU 100%的使用率,周期大约2分钟。经调试和排查,发现原因在于nova-conductor在执行某一数据库操作时,请求数据量巨大, 仅数据库查找耗时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-144}], u‘objname‘: u‘InstanceList‘, u‘kwargs‘: {u‘use_slave‘: True}

     功能:根据host信息查询该计算节点上所有已删除实例的信息,注意这里获取instance数据库信息的filter的deleted=True。这里是获取node-144计算节点上所有已删除实例的数据库信息,执行时间140.429696083s,此间CPU利用率基本处于100%。随着openstack系统的持续运行,数据库中的删除虚拟机信息将会越来越多,该数据查找操作也会继续变大,CPU耗时也将越长。node-144上进行创建删除的虚拟机较多,所以查询的时间最长,占用CPU 100%的时间也最长,对于其它计算节点上的InstanceList查询会持续在10s左右。


请求者: nova-compute

     执行该请求的函数(不完全统计):

  •   _run_pending_deletes (定时任务,默认3m执行一次)
  • _cleanup_running_deleted_instances(定时任务,默认30m执行一次)

建议:
         定期清理数据库!

nova-conductor单个进程占用CPU 100%