我尝试在混合模式下使用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参数,一切正常。我的os是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页面,混合模式只能用于删除调试器。