1

我尝试在混合模式下使用 jstack 查看本机调用堆栈,但我发现 jstack 总是向我显示此错误消息。

sili@linux32:~$ jps
2834 Jps
2825 Server

sili@linux32:~$ jstack -m 2825
Attaching to process ID 2825, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process

没有 -m 参数,一切正常。我的操作系统是 ubuntu 11.04,java -version 的输出是

sili@linux32:~$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

另外,我的测试程序非常简单,如下所示。我尝试使用 Oracle 发布的 java 或我自己从源代码构建的 gamma 到 lanuch Server,但它们都无法使用 jstack 混合模式。

import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.ServerSocket;  
import java.net.Socket;  

class Server {  

    public static void main(String[] args) throws Exception {  

        ServerSocket server = new ServerSocket(10000);  

        Socket accept = server.accept();  

    InputStream in = accept.getInputStream();  

    byte[] buf = new byte[1024];  

    int num = in.read(buf);  

    String str = new String(buf,0,num);  

        System.out.println(str);  

        accept.close();  
        server.close();       
    }
}

根据 Oracle 的 jstack 页面,混合模式只能与删除调试器一起使用。

4

0 回答 0