Like Share Discussion Bookmark Smile

J.J. Huang   2020-05-19   Java   瀏覽次數:

《阿里Java開發手冊》 | 工程結構 - 伺服器

【推薦】高並發伺服器建議調小 TCP 協議的 time_wait 超時時間。
說明:操作系統預設 240 秒後,才會關閉處於 time_wait 狀態的連接,在高並發訪問下,伺服器端會因為處於 time_wait 的連接數太多,可能無法建立新的連接,所以需要在伺服器上調小此等待值。
正例:在 linux 伺服器上請通過變更 /etc/sysctl.conf 文件去修改該缺省值(秒):

1
net.ipv4.tcp_fin_timeout = 30

【推薦】調大伺服器所支持的最大文件句柄數(FileDescriptor,簡寫為fd)。
說明:主流操作系統的設計是將 TCP/UDP 連接採用與文件一樣的方式去管理,即一個連接對應於一個 fd。主流的 linux 伺服器預設所支持最大 fd 數量為 1024,當並發連接數很大時很容易因為 fd 不足而出現 “open too many files” 錯誤,導致新的連接無法建立。建議將 linux 伺服器所支持的最大句柄數調高數倍(與伺服器的內存數量相關)。


【推薦】給 JVM 環境參數設置 -XX:+HeapDumpOnOutOfMemoryError 參數,讓 JVM 碰到 OOM場景時輸出 dump 訊息。
說明:OOM 的發生是有概率的,甚至相隔數月才出現一例,出錯時的堆內訊息對解決問題非常有幫助。


【推薦】在線上生產環境,JVM 的 Xms 和 Xmx 設置一樣大小的內存容量,避免在 GC 後調整堆大小帶來的壓力。


【參考】伺服器內部重定向必須使用 forward; 外部重定向地址必須使用 URLBroker 生成,否則因線上採用 HTTPS 協議而導致瀏覽器提示“不安全“。此外,還會帶來 URL 維護不一致的問題。


心得

看完這篇「伺服器」後,了解到很多伺服器上面的設定也是需要注意的;另外像是 OOM 這個問題,自動 dump 出來的參數設定,真的很需要,常常是因為工程師寫的程式碼不好,造成 OOM 而且是非常難找到問題點的。

結語

文章越看越多,技術越學越多,就會發現自己的不足;技術學到後面都會想要將基礎再重新在打得更加扎實。

以前在開發覺得理所當然的事情,例如:命名規則、命名規範,照著別人怎麼說就怎麼做的想法,並沒有好好去想為什麼要這樣設計和規範。
於是乎同事們推薦《阿里巴巴Java開發手冊》來做閱讀,書中提到種種規範《正確範例》、《錯誤範例》還有解釋定義說明;我相信在閱讀完這一系列後,一定會更加扎實且實在。

如對此書有興趣,建議去購買官方認證的書籍,給予官方支持。

註:如有侵權,通知即刪。


註:以上參考了
Alibaba-Java-Coding-Guidelines Github
Alibaba-Java-Coding-Guidelines English Version