日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java.net.SocketException:No buffer space avaliable(maximum connection reached?):JVM_Bind 解决办法...

發布時間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java.net.SocketException:No buffer space avaliable(maximum connection reached?):JVM_Bind 解决办法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
No buffer space available 2009-06-15 14:03

?

java.net.SocketException: No?buffer?space?available (maximum connections reached?): JVM_Bind 2009-04-14 09:10

?????? 公司服務器最近幾天一直報錯誤,大概運行一天就報如下異常。

?????? java.net.SocketException: No?buffer?space?available (maximum connections reached?): JVM_Bind

?????? 搞的很是郁悶,轉載篇文章,貌似很全面,試試看。

?

?????? 一個朋友讓我幫忙解決他服務器上一個JAVA應用出現的問題,我利用業務時間趕赴現場兩次,終于解決了這個疑難雜癥,趕緊記錄下來,不求能解救曾經和我一樣困惑的勞苦大眾,但愿自己別忘了。

一、問題的表現

首先說明一下環境,服務器是WINDOWS?SERVER 2003,我對這個操作系統的特性不是很熟悉,只是當做普通的個人版操作系統來使用。我平時一般JAVA服務器都是安裝LINUX。

數據庫使用的SQL SERVER 2005,SP2。他的數據庫本來是SQL SERVER 2000的,是我上周幫他做的遷移。

中間件使用RESIN 2.1.17,這是我非常喜歡和熟悉的SERVLET容器,加不加裝APACHE都具有很好的WEB服務性能。

殺毒軟件使用的瑞星,雙網卡,硬件防火墻,什么牌子我沒管。

那到底是什么問題?

這個!

com.microsoft.sqlserver.jdbc.SQLServerException: 到主機 的 TCP/IP?連接失敗。 java.net.SocketException: No?buffer?space?available (maximum connections reached?): JVM_Bind

RESIN啟動后,在短時間內正常,但是在沒有訪問的情況下,會在幾個小時后,自己死掉。靜態頁面沒有問題,也就是基于HTTPWEB服務器沒有死,涉及數據庫連接的,都不行。

二、分析

我是第一次碰到這個錯誤,趕緊GOOGLE。

我首先自己排除了是程序的問題,網上有人說,是數據庫連接沒有關閉,這樣的同志都是新手,而且我自己也可以肯定,程序是肯定沒有問題的,這個錯誤,出現的位置絕對比數據庫連接要底層的多。

網上的文章非常少,都看了一遍,總結一共有以下幾個原因。

1.?Windows服務器運行自動更新。具體為什么自動更新運行后,就會消耗系統這么多的SOCKET?連接,我還搞不清楚。但是有一點,自動更新肯定會占用網絡帶寬和CPU,在服務器上,我覺得應該是關閉自動更新的,采用人工更新的方法。

2.機器中了木馬。木馬會打開很多后門,創建大量的連接,包括局域網肉雞上的,還有外網的。這也會導致機器出現無法上網,或者程序無法連接。在搜索到的結果中,大量的結果都是采用的SQLSERVER數據庫服務器,這是很容易招來木馬和病毒的服務器,大部分是SQLSERVER出問題,不是偶然的。

3.虛擬內存配置過低。第一次發現這個問題后,我到現場打開機器,確實報了一個虛擬內存的錯誤,說虛擬內容不足。

4.有不當程序創建了大量的短連接,由于程序的不健壯,導致SOCKET處于忙碌或者TIME_WAIT狀態,或者服務器和客戶端有一方出現異常,而另一方沒有得到通知,還在連接,持續不斷的做寫操作。

三、動手解決

經過分析,將準備采取的措施一一寫下來,我的腦袋不太好用,容易忘記東西。

措施如下,先做什么,后做什么,看到這篇文章的朋友,可以自己調整。

1. 優化RESIN的配置,適當的擴大連接池的數量,雖然不是這個問題,還是稍微擴大一點。配置了遠程監控,關閉了默認沒有做的目錄瀏覽,屏蔽了404等錯誤;使用HTTPD -INSTALL將RESIN安裝入服務,原來我的朋友是直接啟動的控制臺,這容易導致程序在控制臺緩存到頂后停止。關閉了HIBERNATE的SHOW_SQL開關。

2.關閉自動更新,并且關閉Background Intelligent Transfer Service服務。打開服務的時候,發現服務窗口5秒后會自動關閉,而且奇怪的服務非常多。同時看到NORTON已經被自動禁用了,打也打不開,得,這機器的病毒還不少。

3.殺毒。不看不知道,一看嚇一跳。我這哥們真是個大猛男,媽的,各種病毒都中了,還服務呢,這SERVER真是可憐啊!病了主人也不給看病,為國家服務的機器,不可能沒有醫保嘛。親爸不管叔叔來給你治病。經過分析,中的病毒有U盤病毒,還有RUNAUTO..病毒,灰鴿子,傳奇木馬,各種不知名的后門和木馬,還被安裝了一個遠程控制的小東西。下載了一個360,想偷懶,結果根本無法安裝。刪除了RUNAUTO..,(我以前的博客有專門描述怎么對付這玩意的)結果C盤都打不開了,只能在資源管理器中打開。還挺麻煩。于是找到病毒幾個藏身之所,分析了未知服務,用DOS刪除不掉,還是360的文件粉碎有用。什么c:\windows\lsass.exe等等,cmd.exe.exe這都太普通了。具體過程也不是很清楚了,總之最后360可以安裝并更新了。360這東西確實好,木馬都清除了。現在服務窗口也不自動關閉了,NORTON也正常監控,機器沒有異常打開的端口,沒有莫名其妙的服務,恩,差不多了。

4.優化服務器設置。其實我也不知道這么優化。看了看,虛擬內存都在C盤,C盤空間已經非常少了,找了點看的明白的東西,往別的盤搬了搬,看不懂的,不敢隨便給人家動。重新打開服務窗口,沒什么用的服務都開著,把我確定的都關閉,什么SERVER服務,還開著ADMIN$呢,趕緊都關了,他這機器根本用不著。還有什么IIS,APACHE,開的還真全,我看還安裝了TOMCAT了,干脆加上RESIN全打開算了,那真是夠熱鬧的,萬馬齊喑。我當然不允許這事出現,全干掉。

5.檢查是否某個程序有漏洞。由于我自己在RESIN下還配置了一個只有我自己連GOOGLE的機器人都無法發現(并且也拒絕了機器人掃描)的小工具,之前就看到有外網IP不時的創建大量的連接,但都處于TIME_WAIT狀態。這也很要命。看了一下,除了這個WEB應用,還有一個每天自動接收數據的小程序。這個程序是使用的SOCKET長連接還是短連接就不知道了,有朋友關心這方面的內容可以詳細GOOGLE一下。但是這個程序確實是沒有被配置為開機自動運行(我給加上了),可能是外網那個IP上的客戶端在不斷的尋求連接吧!SOCKET.close()是不馬上釋放連接的,而是設置為TIME_WAIT狀態,這個時間默認是240S,也就是4分鐘。這太長了,有30秒(最小值)就可以了。在修改這個默認值的時候,還發現這臺機器并沒有開啟大端口服務,也就是高于5000的端口。這也是會出現“系統缺乏足夠緩沖區空間或者因為隊列已滿無法執行套接字上操作”錯誤的!而那WEB服務就是配置到1萬以上端口的!趕緊,操作方法如下:

1. 啟動注冊表編輯器。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters?
2. 新建

值名稱:MaxUserPort?
值類型: DWORD
值數據: 65534(用十進制的方法寫進去就可以,如果是十六進制,是FFFE,因為4個F是65535嘛)
有效范圍: 5000 - 65534 (十進制)
默認: 0x1388 5000 (十進制)

新建

值名稱:TCPTimedWaitDelay
值類型: DWORD
值數據: 0000001e(也就是30,不行可以用WINDOWS計算器,很方便,這個表示TIME_WAIT的秒數)

OK!

經過一番折騰,我在震耳欲聾的轟鳴聲中,終于安撫了這臺哭泣的服務器,也馴服了幾匹小木馬,好好調教了我的RESIN服務器。順便說一句,我身后有臺什么愛默生服務器,隔一會就象打嗝似的叫一聲,時常把我嚇到……

希望花費我1個多小時寫的這個總結,對我自己肯定有用,也希望能幫到更多的朋友,如果轉載,請注明出處。

上文轉自:http://lanxin1985.iteye.com/blog/551469

解決辦法的官方出處為:https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t

轉載于:https://www.cnblogs.com/jackliu2013/p/8447127.html

總結

以上是生活随笔為你收集整理的java.net.SocketException:No buffer space avaliable(maximum connection reached?):JVM_Bind 解决办法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。