今天發(fā)現(xiàn)了一個超大文件傳輸,會引起ftp不響應的問題。
軟件的工作場景是這樣的。目標機上有大約幾十個文件,并且啟動了ftp服務,客戶端軟件通過ftp協(xié)議,將目標機上的文件拷貝到本地。
為了提高軟件下載文件的效率,客戶端軟件采用了多線程并發(fā)機制,針對目標機上每個文件,都建立一個ftp連接。文件下載完成后,即關閉連接。
最近在測試的過程中發(fā)現(xiàn),在文件下載過程中,經(jīng)常會出現(xiàn)ftp連接響應超時的問題。這個問題十多秒,又會恢復正常。過一會兒又出現(xiàn)這個問題。
今天經(jīng)過排查,找到了問題的原因。如果目標機上的各個文件都不大,通過ftp傳輸能在很短的時間內完成的話,那么整個下載過程就會比較順暢。
但如果其中某個文件很大,例如幾百M到上G,就會出現(xiàn)整個下載過程時斷時續(xù)的問題。他的原因在于,下載那個非常大的文件的時候,會占用目標機很多的CPU時間,讓CPU無法響應別的ftp連接,從而導致別的ftp連接出現(xiàn)超時的問題。
從對這個問題的排查過程中,我得到兩個收獲。
第一,超大文件的對外傳輸,會占用本機過多的CPU時間,從而導致本機無法響應外界的其他請求。當然這個問題更可能在處理器性能極低,和核數(shù)極少的情況下出現(xiàn),比如龍芯處理器。
第二,排查問題的過程,要關注變化。從剛開始的運行良好,到現(xiàn)在的運行總是出問題,之間肯定發(fā)生了某些技術狀態(tài)變化。要特別關注技術狀態(tài)變化是不是會引起問題的發(fā)生。
拿這次問題排查的過程來看,從去年上一個狀態(tài),軟件能夠運行良好,到今年的時候,軟件運行很容易就出現(xiàn)問題,排查問題的時候,也對這其中的變化作了梳理,但是就是沒有能夠識別出,目標機上某個文件變大這個情況。就更不會意識到,文件變大,會引起這個問題的發(fā)生。
所以僅僅知道在排查問題的時候要關注前后的變化,其實是不夠的。在碰到具體問題的時候,想要做到這一點還是比較困難。所以除了有理論指導之外,在問題排查的時候,要有具體問題具體分析的能力,而這個能力,可能需要在長期實踐中鍛煉提高。