2011-06-24 51 views
0

我有3個服務器的進程需要所有他們可以得到的CPU。我讓這些進程寫自己的標準輸出到文件監測過程性能影響?

./run.sh > run.log 

會寫這篇文章拖慢進程? (./run.sh腳本啓動例如一個Java程序,有時也是一個Ruby程序)

現在我想創建一個web界面,它將在腳本運行時顯示腳本的輸出。我可以想象編寫一個每5秒刷新一次的php腳本,創建一個到服務器的SSH連接並獲取run.log文件。

但不會干擾過程或減慢速度? 服務器能夠儘可能多地使用它的功能非常重要。或者有更好的方法來處理這個問題嗎?而不是每5秒創建一次SSH連接,而是使用Ajax進行持久連接和更新? (安全不是要求)

+0

如果您非常擔心,那麼首先不應該使用Java或Ruby。 – 2011-06-24 14:41:53

+0

這不是那麼重要,我會經歷學習C的麻煩:)工作的肉也使用EclipseCLP完成,Java和Ruby用於指導一切。目前這是考慮到時間限制的最佳解決方案。 – Joris

回答

1

這樣寫是否會減慢過程? (./run.sh腳本啓動例如Java程序並且有時是Ruby程序)

也許;如果進程寫入大量數據,它可能會輕易減慢進程,因爲進程可能會同步寫入磁盤。否則,你不必擔心。

另一種方法是設置腳本通過某種消息服務將輸出發送到機器的Web應用程序。這將避免輪詢服務器;是否更高效取決於細節。

一個簡單而有效的機制是將標準輸出轉發到UDP套接字,並讓網絡應用程序將這些消息臨時收集並存儲在循環緩衝區中。

+0

感謝您的回答,會不會有一個簡單的方法來做到這一點?通過套接字發送輸出會比寫出更快?它不是那麼多的數據,每寫出約40行的時間約爲-30秒 – Joris

+0

每30秒有40行輸出,我不會擔心性能下降......儘管你所談論的數據要多得多那。爲了回答你的問題,我真的不知道速度如何,但是通過UDP套接字發送數據有利於你不必輪詢服務器,從而使事情變得更簡單。您可以使用'ncat'輕鬆創建監聽和發送UDP套接字。 – Artefacto

+0

酷!感謝您的回覆,我谷歌搜索了一下,現在我用netcat發送我的進程輸出爲logacy :) – Joris