青岛建设集团招聘信息网站,东莞公司网站开发,织梦网站会员功能,广州注册公司如何经营我创建了一个线程池并为它提供了50个连接到服务器的任务.所以一旦完成连接,发送一些数据,然后断开连接.它的读取超时设置为5秒(当然是5000长).我甚至将线程池设置为最大大小为1.然后在linux上启动它,然后运行htop(更好的top版本)来检查CPU使用率.我一直在100#xff05;看到我…我创建了一个线程池并为它提供了50个连接到服务器的任务.所以一旦完成连接,发送一些数据,然后断开连接.它的读取超时设置为5秒(当然是5000长).我甚至将线程池设置为最大大小为1.然后在linux上启动它,然后运行htop(更好的top版本)来检查CPU使用率.我一直在100看到我的一个核心(2核心机器).我用hprof(-agentlibhprof 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,混合模式)Update1Sun的JVM也出现同样的问题java -versionJava version 1.6.0_20Update2这是由于本地的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);}}