Linux每程式執行緒數問題處理
Linux每程式執行緒數問題處理
公司的一臺伺服器升級,原先執行正常的一個服務經常會跳出,於是予以分析解決。
該服務是一個tcp的服務端程式,被動接收客戶端連線處理資料,升級後當客戶端連線到一定量後程式會自動跳出。
使用netstat檢視各個狀態的數量
netstat -na |awk ‘{print $6}’|sort |uniq -c |sort -nr
發現很多的CLOSE_WAIT,並且還在不斷增加中。
覺得可能是CLOSE_WAIT得不到釋放,佔用很多資源,
於是修改sysctl.conf中關於tcp連線的連線時間等設定,結果問題依舊。
懷疑收到攻擊,使用
netstat -na |grep CLOSE_WAIT|awk ‘{print $5}’|awk -F”:” ‘{print $1}’|sort |uniq -c |sort -nr |wc -l 檢視連線過來的地址,發現都是地址來源都是正常的
首先檢查
使用 ps -fe |grep programname 檢視獲得程式的pid
再使用 ps -Lf pid 檢視對應程式下的執行緒數,發現數值為303,遠小於實際應該的數量。於是初步判斷是由於執行緒數不夠造成的原因。查詢資料發現可以透過設定 ulimit -s 來增加每程式執行緒數。
每程式可用執行緒數 = VIRT上限/stack size
其中 VIRT 上限: 32位x86 = 3G 64位x64=64G
statck size 預設是 10240 因此在預設情況下
32位系統上單程式最多可以建立300個執行緒,
64系統在記憶體充足的情況下最多可以建立 6400 個執行緒。
在機器硬體固定的情況下,可以透過 ulimit -s 降低stack size 的設定值來獲得更多的每程式執行緒數。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16396910/viewspace-1034818/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- Linux執行緒(程式)數限制Linux執行緒
- IO處理執行緒執行緒
- Linux 執行緒(程式)數限制分析Linux執行緒
- linux 檢視 程式 執行緒數Linux執行緒
- Android高併發問題處理和執行緒池ThreadPool執行緒池原始碼分析Android執行緒thread原始碼
- 執行緒問題執行緒
- 怎麼處理WEB應用中的JAVA多執行緒問題(併發問題)WebJava執行緒
- 如何處理執行緒死鎖執行緒
- mysql 5.7 執行緒阻塞處理MySql執行緒
- java多執行緒執行問題Java執行緒
- 多執行緒問題執行緒
- 執行緒問題2(注意例項變數)執行緒變數
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒
- 執行緒安全處理之Threadlocal執行緒thread
- 【轉】JAVA處理執行緒超時Java執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- java執行緒安全問題Java執行緒
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- MySQL自定義變數處理行號問題MySql變數
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- JDK執行緒池異常處理方式JDK執行緒
- Spring如何處理執行緒併發Spring執行緒
- QT中跨執行緒警告的處理QT執行緒
- QT執行緒同步與非同步處理QT執行緒非同步
- 前端多執行緒處理——async/await前端執行緒AI
- Netty中的執行緒處理EventLoopNetty執行緒OOP
- Spring多執行緒事務處理Spring執行緒
- Linux多執行緒面試題Linux執行緒面試題
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒
- 多執行緒中的使用共享變數的問題執行緒變數
- 作業系統的程式/執行緒同步問題作業系統執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 多執行緒問題解釋執行緒
- JUC之多執行緒鎖問題執行緒
- ArrayList 的執行緒安全問題執行緒