一直都有在使用supervisor來管理linux上的服務進程。最近有同事說有某服務貌似有問題,讓上去檢查一下。上去以后發現某服務反應的確很慢,所以就用supervisor重啟一下。但是重啟的時候就發現問題了,平時一兩秒就可以完成的操作,現在竟然要幾分鐘!這個非常的不科學,一定要查原因! 最開始懷疑的是文件系統是不是出問題了,io會不會太高了。排除掉以后,就開始檢查supervisor的進程,發現它的cpu很高。這時候就很奇怪了,其它服務器上的supervisor的cpu占用都很低的啊,為什么呢?然后就開始對比這兩臺機器上面supervisor所管理的進程有些什么不同。最后發現,有問題的機器上面,supervisor所管理的進程里面有好些進程有很大量很頻繁的stdout輸出(我們這里用的是tornado,默認的日志會輸出到stdout)。當很多的進程都在同時輸出大量的stdout的時候,supervisor就會疲于處理這些輸出數據和記錄日志,最終就會導致supervisor處理變慢。
當我們調整了被管理程序的logger輸出方式以后,supervisor馬上就回復正常了。 所以,在使用supervisor的時候,被管理的程序最好避免有大量很頻繁的stdout或者stderr輸出,否則管理就有可能出問題了。
新聞熱點
疑難解答