spring cloud系列組件的參數解析

1. springboot內置tomcat容器的參數配置
server:
    port: 12021
    # server端的socket超時間(毫秒),使用值-1表示沒有(即無限)超時,默認值爲60000(即60秒)
    # Tomcat附帶的標準server.xml將此值設置爲20000(即20秒),除非disableUploadTimeout設置爲false,不然在讀取請求正文(若是有)時也會使用此超時
    connection-timeout: 80000
    tomcat:
      # URL統一編碼
      uri-encoding: UTF-8
      # 處理的最大併發請求數,默認值200
      max-threads: 1000        
      # 在給定時間接受和處理的最大鏈接數,默認值10000
      max-connections: 20000
      # 初始化時建立的最小線程數,始終保持運行,默認值10
      min-spare-threads: 20
      # 監聽端口隊列最大數,滿了以後客戶請求會被拒絕(不能小於maxSpareThreads),默認爲100
      acceptCount: 700
      # 取消post參數大小限制,默認爲2097152(2M)
      max-http-post-size: -1 
      # 請求和響應HTTP標頭的最大大小,以字節爲單位指定,若是未指定,則此屬性設置爲8192(8 KB)
      max-http-header-size: 8192(8 KB)

開發中遇到問題,需查詢tomcat官方文檔: http://tomcat.apache.org/tomcat-8.0-doc/config/http.html#HTTP/1.1_and_HTTP/1.0_Supporthtml

2. spring cloud hystrix的參數配置
hystrix.command.default和hystrix.threadpool.default中的default爲默認CommandKey(默認值:當前執行方法名)
Execution相關的屬性的配置:
隔離策略,有THREAD和SEMAPHORE
THREAD - 它在單獨的線程上執行,併發請求受線程池中的線程數量的限制
SEMAPHORE - 它在調用線程上執行,併發請求受到信號量計數的限制
hystrix.command.default.execution.isolation.strategy 隔離策略,默認是Thread, 可選Thread|Semaphore
在THREAD模式下,達到超時時間,能夠中斷
在SEMAPHORE模式下,會等待執行完成後,再去判斷是否超時
設置標準:有retry,99meantime+avg meantime;沒有retry,99.5meantime
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 命令執行超時時間,默認1000ms
hystrix.command.default.execution.timeout.enabled 執行是否啓用超時,默認啓用true
hystrix.command.default.execution.isolation.thread.interruptOnTimeout 發生超時是是否中斷,默認true(THREAD模式有效)
execution.isolation.thread.interruptOnCancel 當發生取消時,執行是否應該中斷,默認值爲false(THREAD模式有效)
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests 最大併發請求數,默認10,該參數當使用ExecutionIsolationStrategy.SEMAPHORE策略時纔有效。若是達到最大併發請求數,請求會被拒絕。理論上選擇semaphore size的原則和選擇thread size一致,但選用semaphore時每次執行的單元要比較小且執行速度快(ms級別),不然的話應該用thread
semaphore應該佔整個容器(tomcat)的線程池的一小部分

Fallback相關的屬性:(應用於Hystrix的THREAD和SEMAPHORE策略)
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests 若是併發數達到該設置值,請求會被拒絕和拋出異常而且fallback不會被調用,默認10
hystrix.command.default.fallback.enabled 當執行失敗或者請求被拒絕,是否會嘗試調用hystrixCommand.getFallback(),默認true

Collapser Properties相關參數:
hystrix.collapser.default.maxRequestsInBatch 單次批處理的最大請求數,達到該數量觸發批處理,默認Integer.MAX_VALUE
hystrix.collapser.default.timerDelayInMilliseconds 觸發批處理的延遲,也能夠爲建立批處理的時間+該值,默認10
hystrix.collapser.default.requestCache.enabled 是否對HystrixCollapser.execute() and HystrixCollapser.queue()的cache,默認true

ThreadPool相關參數:
線程數默認值10適用於大部分狀況(有時能夠設置得更小),若是須要設置得更大,那有個基本得公式能夠follow:
requests per second at peak when healthy × 99th percentile latency in seconds + some breathing room
每秒最大支撐的請求數 (99%平均響應時間 + 緩存值)
好比:每秒能處理1000個請求,99%的請求響應時間是60ms,那麼公式是:1000 * (0.060+0.012)
基本得原則時保持線程池儘量小,主要是爲了釋放壓力,防止資源被阻塞。當一切都是正常的時候,線程池通常僅會有1到2個線程激活來提供服務。
hystrix.threadpool.default.coreSize 併發執行的最大線程數,默認10
hystrix.threadpool.default.maxQueueSize BlockingQueue的最大隊列數,當設爲-1,會使用SynchronousQueue,值爲正時使用LinkedBlcokingQueue。該設置只會在初始化時有效,以後不能修改threadpool的queue size,除非reinitialising thread executor。默認-1。
hystrix.threadpool.default.queueSizeRejectionThreshold 即便maxQueueSize沒有達到,達到queueSizeRejectionThreshold該值後,請求也會被拒絕。由於maxQueueSize不能被動態修改,這個參數將容許咱們動態設置該值。if maxQueueSize == -1,該字段將不起做用
hystrix.threadpool.default.keepAliveTimeMinutes 若是corePoolSize和maxPoolSize設成同樣(默認實現)該設置無效。若是經過plugin(https://github.com/Netflix/Hystrix/wiki/Plugins)使用自定義實現,該設置纔有用,默認1.
hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds 線程池統計指標的時間,默認10000
hystrix.threadpool.default.metrics.rollingStats.numBuckets 將rolling window劃分爲n個buckets,默認10

實際使用中,可按照報錯詳情,調整參數git

相關文章
相關標籤/搜索