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執行緒
- 執行緒安全處理之Threadlocal執行緒thread
- 如何處理執行緒死鎖執行緒
- mysql 5.7 執行緒阻塞處理MySql執行緒
- 執行緒問題2(注意例項變數)執行緒變數
- 前端多執行緒處理——async/await前端執行緒AI
- Spring多執行緒事務處理Spring執行緒
- Netty中的執行緒處理EventLoopNetty執行緒OOP
- Spring如何處理執行緒併發Spring執行緒
- 03 執行緒安全問題執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- Linux 問題處理集錦Linux
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- Linux多執行緒面試題Linux執行緒面試題
- JDK執行緒池異常處理方式JDK執行緒
- QT執行緒同步與非同步處理QT執行緒非同步
- QT中跨執行緒警告的處理QT執行緒
- ArrayList 的執行緒安全問題執行緒
- 深入JAVA執行緒安全問題Java執行緒
- 多執行緒問題解釋執行緒
- JUC之多執行緒鎖問題執行緒
- 多執行緒相關問題執行緒
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒
- ThreadPoolExecutor執行緒池內部處理淺析thread執行緒
- 多工處理方式之二:多執行緒執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Linux執行緒與程式的區別Linux執行緒
- 簡述Linux 中程式與執行緒Linux執行緒
- Linux程式執行緒學習筆記Linux執行緒筆記
- Linux程式與執行緒的區別Linux執行緒
- 程式執行緒篇——程式執行緒基礎執行緒
- Android 資料庫綜述(二) 程式計算器與訊號量來處理多執行緒併發問題Android資料庫執行緒
- 子執行緒 UI 問題捉蟲執行緒UI
- 多執行緒之8鎖問題執行緒
- parallelStream中的執行緒安全問題Parallel執行緒
- 05.java多執行緒問題Java執行緒
- Linux中程式與程式、執行緒的區別!Linux執行緒
- 企圖使用c++執行緒解決nodejs單執行緒問題C++執行緒NodeJS