springboot 內置容器Undertow 優化記錄


                   問題描述:最近項目在各個環境,發現第一次請求時候,總是會很慢。但是之后的請求都是幾十或者幾百毫秒。通過skywalking檢測,發現有個undertow特別耗時:

   

 

 

 

 

一般都是第一次有這個問題,之后再請求,都是毫秒級的。

      網上搜了幾次后,剛開始是在yaml文件加上配置:

      

 server:
  port: ${LAFENG_SERVER_PORT:8102}
  undertow:
    io-threads: 16
    # 阻塞任務線程池, 當執行類似servlet請求阻塞IO操作, undertow會從這個線程池中取得線程
    # 它的值設置取決於系統線程執行任務的阻塞系數,默認值是IO線程數*8
    worker-threads: 256
    # 以下的配置會影響buffer,這些buffer會用於服務器連接的IO操作,有點類似netty的池化內存管理
    # 每塊buffer的空間大小,越小的空間被利用越充分,不要設置太大,以免影響其他應用,合適即可
    buffer-size: 1024
    # 每個區分配的buffer數量 , 所以pool的大小是buffer-size * buffers-per-region
    #buffers-per-region: 1024
    # 是否分配的直接內存(NIO直接分配的堆外內存)
    direct-buffers: true

   發現不起作用,剛開始以為是自己設置的問題。但是網上開了幾篇類似文章,解決方式都是讓加這個配置。最后發現是自己寫的方式有問題:改成這種就生效了

 

 

 

   

server:
  port: ${LAFENG_SERVER_PORT:8102}
  undertow:
    # 阻塞任務線程池, 當執行類似servlet請求阻塞IO操作, undertow會從這個線程池中取得線程
    # 它的值設置取決於系統線程執行任務的阻塞系數,默認值是IO線程數*8
    # 以下的配置會影響buffer,這些buffer會用於服務器連接的IO操作,有點類似netty的池化內存管理
    # 每塊buffer的空間大小,越小的空間被利用越充分,不要設置太大,以免影響其他應用,合適即可
    buffer-size: 1024
    # 每個區分配的buffer數量 , 所以pool的大小是buffer-size * buffers-per-region
    #buffers-per-region: 1024
    # 是否分配的直接內存(NIO直接分配的堆外內存)
    direct-buffers: true
    threads:
      io: 8
      worker: 256

 

    具體原因,網上有分析。參考:

   https://blog.csdn.net/hunger_wang/article/details/91997210?spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-16.topblog&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-16.topblog&utm_relevant_index=23

 

 

  https://blog.csdn.net/weixin_40623736/article/details/117482482

 

https://blog.csdn.net/hunger_wang/article/details/90180215

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM