2014-02-06 30 views
5

我在Ubuntu 12上遇到Tomcat7打開的文件過多的問題,所以我將打開的文件數量從4096和1024分別增加到了16384。現在我沒有收到任何更多有關打開文件的錯誤,但總體CPU%似乎已上升。增加最大文件的數量是否也會在CPU時間中產生一些成本?如果沒有,爲什麼不把ulimit設置得過高呢?設置ulimit真的有什麼缺點嗎?

+0

我經常把我打開文件描述符限制我從來沒有注意到任何性能影響(當然,除了我的程序再次開始工作外)。 – phs

回答

2

的ulimit存在的整個原因是防止使用更多的資源的過程比是「正常」,以保護系統的整體性能。

「正常」,可根據你在做什麼,而是設置限制默認情況下會破壞的ulimit的目的,並允許任何過程中使用了可笑的資源量非常高的不同。在沒有用戶的服務器上,這不像一個大型的多用戶環境那麼重要,但它仍然是防止錯誤或被利用的進程的有用保護措施。

您的CPU可能只是上升了,因爲您的計算機現在正在做更多的工作,而不是錯誤。

PS - 你要確保沒有什麼不對你的tomcat環境太...它可能是確定有成千上萬個打開的文件,我不知道您的應用程序,但也可能是一個越過越野車的東西的跡象。如果是,你剛纔所允許的竊聽器的效果變得更糟可能更:(如果你能解釋一下爲什麼tomcat的需要大量的文件打開,很酷,但如果沒有...亞克西。

+0

是的,它預計會有成千上萬的開放連接 - 我們通常有2000-3500個併發用戶,峯值我們通過30秒的keepalive時間進行長期連接,以避免重複SSL握手的開銷。感謝您的回答! –

+0

成千上萬的開放套接字/併發用戶不必等於數千個打開的文件,但如果它會在你的應用程序中執行,那麼這就可以解釋爲什麼4096的默認限制會導致問題,如果問題在你打到16000個用戶之前不會再回來,我不會爲此擔心。 – user3109924

+0

@ user3109924我的理解是套接字不過是用於通信目的的特殊**文件**。你在Unix中創建一個套接字,你得到一個文件描述符作爲返回值。所以我不明白爲什麼開放套接字/ conns不意味着打開文件描述符?解決10K問題的web服務器是否有超過10K的打開文件描述符限制? – Mikki