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
履行該要求的函數(不完全統計):
上一篇 信息在網絡中的漫游(二)