Dubbo高階篇_10_Dubbo執行緒模型
執行緒模型
http://dubbo.io/User+Guide-zh.htm 使用者指南>>執行緒模型類似於資料庫的連線池
事件處理執行緒說明
|
- Dispatcher
- all 所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等。
- direct 所有訊息都不派發到執行緒池,全部在IO執行緒上直接執行。
- message 只有請求響應訊息派發到執行緒池,其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。
- execution 只請求訊息派發到執行緒池,不含響應,響應和其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。
- connection 在IO執行緒上,將連線斷開事件放入佇列,有序逐個執行,其它訊息派發到執行緒池。
- ThreadPool
- fixed 固定大小執行緒池,啟動時建立執行緒,不關閉,一直持有。(預設)
- cached 快取執行緒池,空閒一分鐘自動刪除,需要時重建。
- limited 可伸縮執行緒池,但池中的執行緒數只會增長不會收縮。(為避免收縮時突然來了大流量引起的效能問題)。
配置如:
< dubbo:protocol name = "dubbo" dispatcher = "all" threadpool = "fixed" threads = "100" />
|
配置標籤
<dubbo:provider/>
<dubbo:protocol/>
例:
<!-- 當ProtocolConfig和ServiceConfig某屬性沒有配置時,採用此預設值 -->
<dubbo:provider timeout="10000" threadpool="fixed" threads="100" accepts="1000" />
<dubbo:protocol/>
服務提供者協議配置:
配置類:com.alibaba.dubbo.config.ProtocolConfig
說明:如果需要支援多協議,可以宣告多個<dubbo:protocol>標籤,並在<dubbo:service>中通過protocol屬性指定使用的協議。
標籤 | 屬性 | 對應URL引數 | 型別 | 是否必填 | 預設值 | 作用 | 描述 | 相容性 |
---|---|---|---|---|---|---|---|---|
<dubbo:protocol> | id | string | 可選 | dubbo | 配置關聯 | 協議BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,預設和name屬性值一樣,重複則在name後加序號。 | 2.0.5以上版本 | |
<dubbo:protocol> | name | <protocol> | string | 必填 | dubbo | 效能調優 | 協議名稱 | 2.0.5以上版本 |
<dubbo:protocol> | port | <port> | int | 可選 |
dubbo協議預設埠為20880,rmi協議預設埠為1099,http和hessian協議預設埠為80 如果配置為-1 或者 沒有配置port,則會分配一個沒有被佔用的埠。Dubbo 2.4.0+,分配的埠在協議預設埠的基礎上增長,確保埠段可控。 |
服務發現 | 服務埠 | 2.0.5以上版本 |
<dubbo:protocol> | host | <host> | string | 可選 | 自動查詢本機IP | 服務發現 | -服務主機名,多網絡卡選擇或指定VIP及域名時使用,為空則自動查詢本機IP,-建議不要配置,讓Dubbo自動獲取本機IP | 2.0.5以上版本 |
<dubbo:protocol> | threadpool | threadpool | string | 可選 | fixed | 效能調優 | 執行緒池型別,可選:fixed/cached | 2.0.5以上版本 |
<dubbo:protocol> | threads | threads | int | 可選 | 100 | 效能調優 | 服務執行緒池大小(固定大小) | 2.0.5以上版本 |
<dubbo:protocol> | iothreads | threads | int | 可選 | cpu個數+1 | 效能調優 | io執行緒池大小(固定大小) | 2.0.5以上版本 |
<dubbo:protocol> | accepts | accepts | int | 可選 | 0 | 效能調優 | 服務提供方最大可接受連線數 | 2.0.5以上版本 |
<dubbo:protocol> | payload | payload | int | 可選 | 88388608(=8M) | 效能調優 | 請求及響應資料包大小限制,單位:位元組 | 2.0.5以上版本 |
<dubbo:protocol> | codec | codec | string | 可選 | dubbo | 效能調優 | 協議編碼方式 | 2.0.5以上版本 |
<dubbo:protocol> | serialization | serialization | string | 可選 | dubbo協議預設為hessian2,rmi協議預設為java,http協議預設為json | 效能調優 | 協議序列化方式,當協議支援多種序列化方式時使用,比如:dubbo協議的dubbo,hessian2,java,compactedjava,以及http協議的json等 | 2.0.5以上版本 |
<dubbo:protocol> | accesslog | accesslog | string/boolean | 可選 | 服務治理 | 設為true,將向logger中輸出訪問日誌,也可填寫訪問日誌檔案路徑,直接把訪問日誌輸出到指定檔案 | 2.0.5以上版本 | |
<dubbo:protocol> | path | <path> | string | 可選 | 服務發現 | 提供者上下文路徑,為服務path的字首 | 2.0.5以上版本 | |
<dubbo:protocol> | transporter | transporter | string | 可選 | dubbo協議預設為netty | 效能調優 | 協議的服務端和客戶端實現型別,比如:dubbo協議的mina,netty等,可以分拆為server和client配置 | 2.0.5以上版本 |
<dubbo:protocol> | server | server | string | 可選 | dubbo協議預設為netty,http協議預設為servlet | 效能調優 | 協議的伺服器端實現型別,比如:dubbo協議的mina,netty等,http協議的jetty,servlet等 | 2.0.5以上版本 |
<dubbo:protocol> | client | client | string | 可選 | dubbo協議預設為netty | 效能調優 | 協議的客戶端實現型別,比如:dubbo協議的mina,netty等 | 2.0.5以上版本 |
<dubbo:protocol> | dispatcher | dispatcher | string | 可選 | dubbo協議預設為all | 效能調優 | 協議的訊息派發方式,用於指定執行緒模型,比如:dubbo協議的all, direct, message, execution, connection等 | 2.1.0以上版本 |
<dubbo:protocol> | queues | queues | int | 可選 | 0 | 效能調優 | 執行緒池佇列大小,當執行緒池滿時,排隊等待執行的佇列大小,建議不要設定,當執行緒程池時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。 | 2.0.5以上版本 |
<dubbo:protocol> | charset | charset | string | 可選 | UTF-8 | 效能調優 | 序列化編碼 | 2.0.5以上版本 |
<dubbo:protocol> | buffer | buffer | int | 可選 | 8192 | 效能調優 | 網路讀寫緩衝區大小 | 2.0.5以上版本 |
<dubbo:protocol> | heartbeat | heartbeat | int | 可選 | 0 | 效能調優 | 心跳間隔,對於長連線,當物理層斷開時,比如拔網線,TCP的FIN訊息來不及傳送,對方收不到斷開事件,此時需要心跳來幫助檢查連線是否已斷開 | 2.0.10以上版本 |
<dubbo:protocol> | telnet | telnet | string | 可選 | 服務治理 | 所支援的telnet命令,多個命令用逗號分隔 | 2.0.5以上版本 | |
<dubbo:protocol> | register | register | boolean | 可選 | true | 服務治理 | 該協議的服務是否註冊到註冊中心 | 2.0.8以上版本 |
<dubbo:protocol> | contextpath | contextpath | String | 可選 | 預設為空串 | 服務治理 | 2.0.6以上版本 |
Linux 使用者執行緒數限制導致的 java.lang.OutOfMemoryError: unable to create new native thread異常
系統預設最大的執行緒數為1024個
[[email protected] ~]# cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 1024
root soft nproc unlimited
[[email protected] ~]# vi /etc/security/limits.d/90-nproc.conf
調整時要注意:
1、 儘量不要使用 root 使用者來部署應用程式,避免資源耗盡後無法登入作業系統。
因為root使用者預設沒有限制執行緒數,如果執行緒過多,會使資源佔用很多,導致不能關機,只能硬關機
2、 普通使用者的執行緒數限制值要看可用實體記憶體容量來配置
[[email protected] ~]# cat /proc/meminfo |grep MemTotalMemTotal: 2941144 kB
[[email protected] ~]# echo "2941144/128"|bc
22977
[[email protected] ~]# ulimit -u
1024
[1]+ Stopped vi /etc/security/limits.d/90-nproc.conf
[[email protected] ~]# vi /etc/security/limits.d/90-nproc.conf
[[email protected] ~]# cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 12000
root soft nproc unlimited
[[email protected] ~]#
計算方式:
default_nproc = total_memory/128K;
$ cat /proc/meminfo |grep MemTotal
$ echo "2941144/128"|bc
$ ulimit -u
ulimit -a #顯示目前資源限制的設定
ulimit -u #使用者最多可開啟的程式數目
重啟,使之生效:# reboot
相關推薦
Dubbo高階篇_10_Dubbo執行緒模型
執行緒模型 http://dubbo.io/User+Guide-zh.htm 使用者指南>>執行緒模型 類似於資料庫的連線池 (+) (#) 事件處理執行緒說明如果事件處理
windows C++多執行緒程式設計高階篇 實現執行緒同步
上一篇文章windows程式設計 使用C++實現多執行緒類僅僅是介紹了怎樣用類來實現多執行緒,這篇文章則重點介紹多執行緒中資料同步的問題。好了,廢話不多說,進入主題。 問題場景:這裡我們假設有這樣一個工作流水線(CWorkPipeline),它不斷的生成一
Dubbo高階篇_10_Dubbo消費端直連服務提供者(開發除錯)
直連提供者(+) (#)在開發及測試環境下,經常需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連,點對點直聯方式,將以服務介面為單位,忽略註冊中心的提供者列表,A介面配置點對點,不影響B介面從註冊中心獲取列表。(1) 如果是線上需求需要點對點,可在<du
Dubbo學習筆記8:Dubbo的執行緒模型與執行緒池策略
Dubbo預設的底層網路通訊使用的是Netty,服務提供方NettyServer使用兩級執行緒池,其中 EventLoopGroup(boss) 主要用來接受客戶端的連結請求,並把接受的請求分發給 EventLoopGroup(worker) 來處理,boss和worker執
dubbo執行緒模型
執行緒模型 如果事件處理的邏輯能迅速完成,並且不會發起新的 IO 請求,比如只是在記憶體中記個標識,則直接在 IO 執行緒上處理更快,因為減少了執行緒池排程。 但如果事件處理邏輯較慢,或者需要發起新的 IO 請求,比如需要查詢資料庫,則必須派發到執行緒池,否則
dubbo的執行緒模型
事件處理執行緒說明1.如果事件處理的邏輯能迅速完成,並且不會發起新的IO請求,比如只是在記憶體中記個標識,則直接在IO執行緒上處理更快,因為減少
.NET設計篇08-執行緒取消模型和跨執行緒訪問UI
知識需要不斷積累、總結和沉澱,思考和寫作是成長的催化劑,輸出倒逼輸入 內容目錄 一、執行緒統一取消模型1、取消令牌2、可以中斷的執行緒1、設計一箇中斷函式2、建立CancellationTokenSource物件3、啟動執行緒4、取消執行緒執行二、跨執行緒訪問UI基本方法1、Control.I
《【面試突擊】— Redis篇》-- Redis的執行緒模型瞭解嗎?為啥單執行緒效率還這麼高?
能堅持別人不能堅持的,才能擁有別人未曾擁有的。關注程式設計大道公眾號,讓我們一同堅持心中所想,一起成長!! 《【面試突擊】— Redis篇》-- Redis的執行緒模型瞭解嗎?為啥單執行緒效率還這麼高? 在這個系列裡,我會整理一些面試題與大家分享,幫助年後和我一樣想要在金三銀四準備
Java執行緒模型總結
1. 計算機系統 使用快取記憶體來作為記憶體與處理器之間的緩衝,將運算需要用到的資料複製到快取中,讓計算能快速進行;當運算結束後再從快取同步回記憶體之中,這樣處理器就無需等待緩慢的記憶體讀寫了。 快取一致性:多處理器系統中,因為共享同一主記憶體,當多個處理器的運算任務都設計到同一塊記憶體區域
Java高階應用:執行緒池全面解析
什麼是執行緒池? 很簡單,簡單看名字就知道是裝有執行緒的池子,我們可以把要執行的多執行緒交給執行緒池來處理,和連線池的概念一樣,通過維護一定數量的執行緒池來達到多個執行緒的複用。 執行緒池的好處 &n
Android執行緒模型--在子執行緒中更新UI
Android是支援多執行緒的。主執行緒也稱UI執行緒,子執行緒也稱工作執行緒。一般耗時操作在子執行緒中進行,更新UI操作在主執行緒中進行。在主執行緒中執行耗時操作容易發生ANR錯誤,即應用程式無響應。而Android中又規定只有建立UI的執行緒
OSG 多執行緒模型 設計思想
A New Processing Model for Multithreaded, Multidisplay Scene Graphs Copyright © 2001 Don Burns (DB - Apr 28, 2004) This article
【轉】Leader-Follower執行緒模型
上圖就是L/F多執行緒模型的狀態變遷圖,共6個關鍵點: (1)執行緒有3種狀態:領導leading,處理processing,追隨following (2)假設共N個執行緒,其中只有1個leading執行緒(等待任務),x個processing執行緒(處理),餘下有N-1-x個following執行緒
多執行緒、多程序之比較,以及三種執行緒模型。
工作幾年找工作幾乎總會被問,從最開始的從網上看答案,到現在憑自己的經驗去說,這個問題似乎也是經驗積累的一個驗證,最近沒事就總結一下吧: 程序和執行緒的定義、比較等: 程序:處於活動狀態的計算機程式。程序就是在作業系統中 執行特定的任務,程序針對
pinpoint agent執行緒模型
pinpoint agent執行緒模型 以下分析基於pinpoint1.7.1版本 pinpoint agent主要使用到的非同步執行緒有4個 DeadlockMonitorThread : 死鎖監測執行緒,執行一次休眠60s public DeadlockMonitorThread(Deadlock
程序執行緒模型
文章目錄 程序的定義 程序控制塊PCB 程序狀態及狀態轉換 程序的三種基本狀態 三狀態模型及狀態轉換 程序的其它狀態 程序的五狀態模型 程序佇列 程序控制
Redis之單執行緒模型
Redis客戶端對服務端的每次呼叫都經歷了傳送命令,執行命令,返回結果三個過程。其中執行命令階段,由於Redis是單執行緒來處理命令的,所有每一條到達服務端的命令不會立刻執行,所有的命令都會進入一個佇列中,然後逐個被執行。並且多個客戶端傳送的命令的執行順序是不確定的。但是可以確定的是不會有兩條命
Netty(EventLoop 和執行緒模型)
EventLoop介面 Netty的EventLoop是協同設計的一部分,它採用了兩個基本的API:併發和網路程式設計。首先,io.netty.util.concurrent包構建在JDK的java.util.concurrent包上,用來提供執行緒執行
自定義高階版python執行緒池
基於簡單版建立類物件過多,現自定義高階版python執行緒池,程式碼如下 1 #高階執行緒池 2 import queue 3 import threading 4 import time 5 StopEvent = object() #全域性變數當作取任務時的停止標誌只要不
執行緒模型
執行緒模型 什麼是程式 安裝在磁碟上的一段指令集合,它是靜態的概念 什麼是程序 它是執行中的程式,是動態的概念,每個程序有獨立的 資源空間 什麼是執行緒 輕量級程序,是程式執行流的最小單元,是程式中一個單一的順序.執行緒是程序中 的一個實體,是被系統獨立排程和分派的基本單位