1. springboot內置tomcat容器的參數配置 server: port: 12021 # server端的socket超時間(毫秒),使用值-1表示沒有(即無限)超時,預設值為60000(即60秒) # Tomcat附帶的標準server.xml將此值設置為20000(即20秒),除非d ...
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_Support
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
實際使用中,可按照報錯詳情,調整參數