我想知道檢查進程健康狀況的方法是什麼。考慮到在一個系統 10000進程正在運行,你必須確保萬一任何這些進程停止,我們需要使進程升級。應用程序健康檢查
應用程序健康檢查
回答
使用進程ID(PID)並查詢進程是否仍然存在或者週期性死機;如果它已經死了,然後重新啓動它。
但是,如果您有10000個進程,您可能會首先觸發操作系統的進程限制。我建議重新設計你的程序,這樣你就不需要那麼多的程序了。
Ryan,你是對的,我們可以做進程ID的輪詢,但可以說我有PID從1到1000000(假設我們已經允許創建那麼多進程),在這種情況下,如果PID發生了什麼情況可以說2,並在我們的情況下輪詢在PID 3,那麼它將花費3到1000000 PID,然後到PID 2檢測到PID 2不存在。因此性能下降更多。 如果我這樣做,而不是輪詢,如果可以註冊應用程序關閉時會出現的一些回調。這個怎麼樣? (基於事件) 此解決方案在可擴展性方面會有什麼問題嗎? – Arpit 2010-07-07 06:13:46
回調如何比投票更快?它們都是O(n),所以除非用於回調的原語比用於PID輪詢的原語快得多,否則不會有太大的區別。 – 2010-07-07 16:44:52
停止重新產卵的進程通常由具有特定的啓動程序來處理exec()程序並等待SIGCHILD指示子進程結束。
對於啓動時應用程序(服務器等),守護程序如upstart可以爲您自動執行此操作。
有一個實用工具叫做monit它可以做你正在尋找的東西。但是對於Linux中的某些重要進程,所有10000個進程都很重要!
雖然其他人指出應用程序已經存在(你真的應該使用,除非你有明確的理由不會),我會拋出一個隨機的想法來定製解決方案。
如果你控制所有的N
進程,那麼使它們都有一個共享內存區域N
比特大(因此,10000進程~1KB,不壞)。當啓動每個進程時,給它一個編號爲i
的數字,範圍從0到N.每個T
秒有每個進程會將共享內存中的位i
設置爲1.監控進程可以檢查所有N
位是否爲1,每k*T
秒,重置他們在這個過程中都是0。
這仍然是O(n),你不會迴避,但是基元都非常快,並且應該很好地擴展到操作系統線程限制。
獲得i
的另一種方法就是使用PID,但共享內存必須更大(儘管如此,可能仍然是OK;例如,Linux PID範圍很小)。
在共享內存中設置一點聲音聽起來不錯,但這不適用於所有舊式Linux服務的情況。 – Arpit 2010-08-06 17:21:20
- 1. Spring Web應用程序健康檢查
- 2. gitlab健康檢查不健康
- 3. SSRS健康檢查
- 4. MySQL健康檢查
- 5. UDP健康檢查
- 6. elb健康檢查和ec2健康檢查有什麼區別?
- 7. Java Web應用程序健康檢查良好做法
- 8. 如何做健康檢查的nginx的和Rails應用程序
- 9. 應用程序洞察:過濾網站健康檢查?
- 10. 爲ASP.NET MVC 4應用程序創建健康檢查頁面
- 11. WSO2流健康檢查
- 12. Elixir的Postgres健康檢查
- 13. Haproxy健康檢查端口
- 14. Js noob健康檢查
- 15. 健康檢查MassTransit和Rabbitmq
- 16. C3P0連接健康檢查
- 17. HAproxy被動健康檢查
- 18. DB健康檢查Rails中
- 19. 健康監測應用程序
- 20. 應用程序被拒絕,健康應用程序權限
- 21. 健康檢查爲使用SQL Server 2008
- 22. AWS AutoScaling:如何禁用健康檢查
- 23. 使用ALB健康檢查redis容器
- 24. 使用/ healthz進行應用程序健康檢查的慣例來自哪裏?
- 25. 數據庫查詢的應用健康檢查 - 管理工具
- 26. 你的網站應用程序或網站有健康檢查嗎?
- 27. 多節點環境 - 單個節點應用程序服務器健康檢查
- 28. 谷歌App Engine的健康檢查垃圾郵件的應用程序
- 29. Eureka在CloudFoundry健康檢查失敗問題上的Spring Boot應用程序
- 30. Spring引導執行程序MySQL數據庫健康檢查
我的問題是關於使這個過程具有可擴展性,並且更多地瞭解不同的方法如何實現。 – Arpit 2010-07-07 06:09:32