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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

socket connect java_网络编程 – 为什么Java的socket.connect()消耗100%的cpu资源?

發布時間:2024/9/27 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 socket connect java_网络编程 – 为什么Java的socket.connect()消耗100%的cpu资源? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我創建了一個線程池并為它提供了50個連接到服務器的任務.所以一旦完成連接,發送一些數據,然后斷開連接.它的讀取超時設置為5秒(當然是5000長).我甚至將線程池設置為最大大小為1.然后在

linux上啟動它,然后運行htop(更好的top版本)來檢查CPU使用率.我一直在100%看到我的一個核心(2核心機器).我用hprof(-agentlib:hprof = cpu = samples,interval = 20,depth = 3)對此進行了分析,并將socket.connect()設置為99%.

這是我覺得奇怪的,是不是阻止IO阻止(因此等待)?我的JDK是(來自java -version):

OpenJDK運行時環境(IcedTea6 1.6.1)(6b16-1.6.1-3ubuntu3)

OpenJDK Server VM(build 14.0-b16,混合模式)

Update1:??Sun的JVM也出現同樣的問題:

java -version

Java version "1.6.0_20"

Update2:這是由于本地的doConnect方法.任何人都知道如何查看此本機/ C代碼的來源?

Update3:我登錄windows編寫代碼并測試它.它工作正常,沒有CPU資源被沖洗.我重新登錄到linux,現在問題仍然在這里,但不是像整個CPU核心那樣只需1次連接就可以了.這是代碼:

import java.io.IOException;

import java.net.InetAddress;

import java.net.InetSocketAddress;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Vector;

import java.util.concurrent.Callable;

import java.util.concurrent.Executors;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class SocketTest {

public static void main(String[] args) {

new SocketTest();

}

public SocketTest() {

ThreadPoolExecutor tpe = (ThreadPoolExecutor) Executors.newFixedThreadPool(40);

Vector> tasks = new Vector>();

for (int i = 0; i < 1500; i++)

tpe.submit(new Thread() {

public void run() {

byte[] ip = { 74, 125, 19, (byte)((Math.random()*253)+1)};

Socket socket = new Socket();

try {

System.out.println("new thread: "+ip[3]);

socket.connect(new InetSocketAddress(InetAddress.getByAddress(ip), 80), 3000);

socket.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

//no need to print

}

}

});

try {

tpe.invokeAll(tasks);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

System.out.println("test");

try {

//too lazy to write actual code to wait for task completness...

tpe.awaitTermination(9001, TimeUnit.DAYS);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("test2");

}

}

總結

以上是生活随笔為你收集整理的socket connect java_网络编程 – 为什么Java的socket.connect()消耗100%的cpu资源?的全部內容,希望文章能夠幫你解決所遇到的問題。

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