`

linux jconsole

    博客分类:
  • JAVA
阅读更多

之前在测试环境使用xming做了linux下jconsole的图像转发,今天想在生产环境也搞下,结果遇到一些问题,这里总结下吧

 

   1:缺少X11显示设置

 

 

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
 

    解决方案:

 

export DISPLAY=localhost:0

   Note:神奇的是我第一次使用就没设置过,还正常了。

   2:JDK4以后的awt headless设置

 

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
        at java.lang.Class.forName0(Native Method)

   解决方案:

   增加这个在java启动参数里

-Djava.awt.headless=true

  Note:一般配置jmx都配置这个参数。

 

   3:如果还是有错,例如和第2个错误一致,请检查是否X11转发已经设置过

 

分享到:
评论
18 楼 xiangyuwen 2012-02-23  
dikar 写道
xiangyuwen 写道
System.setProperty("java.awt.headless", "true");
加上这句好象没用,虽然值改了,但结果还是跟以前报的错误一样。
hadoop jar /home/eclipse/workspace/AVFileMap.jar SPFileMRP -Djava.awt.headless=true 10.1.14.23 11555 hello.avi
  运行不了。出错和报错误还是在同样的。
 
java AVTransmit  可以正常运行(直接在服务器节点,或任何一台节点机上这样运行,都正常)。

我的节点机都是centos5.5版本的,不过都是虚拟机来的,通过VMware这个软件的。

另外,你那个方法getHeadlessMessage()得到null值,函数中用到的
Boolean headless = null;
     Boolean defaultHeadless = null;
     这2个全局变量我猜的,没申明错吧。



如果不介意 ,你发个简单的不带任何业务的代码,我在我的hadoop环境中执行下试试,这样说总是不太明了,我的gmail: dikar222@gmail.com

邮件已经发了,请查收。谢谢!
17 楼 dikar 2012-02-22  
xiangyuwen 写道
System.setProperty("java.awt.headless", "true");
加上这句好象没用,虽然值改了,但结果还是跟以前报的错误一样。
hadoop jar /home/eclipse/workspace/AVFileMap.jar SPFileMRP -Djava.awt.headless=true 10.1.14.23 11555 hello.avi
  运行不了。出错和报错误还是在同样的。
 
java AVTransmit  可以正常运行(直接在服务器节点,或任何一台节点机上这样运行,都正常)。

我的节点机都是centos5.5版本的,不过都是虚拟机来的,通过VMware这个软件的。

另外,你那个方法getHeadlessMessage()得到null值,函数中用到的
Boolean headless = null;
     Boolean defaultHeadless = null;
     这2个全局变量我猜的,没申明错吧。



如果不介意 ,你发个简单的不带任何业务的代码,我在我的hadoop环境中执行下试试,这样说总是不太明了,我的gmail: dikar222@gmail.com
16 楼 xiangyuwen 2012-02-22  
System.setProperty("java.awt.headless", "true");
加上这句好象没用,虽然值改了,但结果还是跟以前报的错误一样。
hadoop jar /home/eclipse/workspace/AVFileMap.jar SPFileMRP -Djava.awt.headless=true 10.1.14.23 11555 hello.avi
  运行不了。出错和报错误还是在同样的。
 
java AVTransmit  可以正常运行(直接在服务器节点,或任何一台节点机上这样运行,都正常)。

我的节点机都是centos5.5版本的,不过都是虚拟机来的,通过VMware这个软件的。

另外,你那个方法getHeadlessMessage()得到null值,函数中用到的
Boolean headless = null;
     Boolean defaultHeadless = null;
     这2个全局变量我猜的,没申明错吧。
15 楼 dikar 2012-02-22  





“ Could not initialize class sun.awt.X11GraphicsEnvironment ” 这个问题如果你在linux下的话,确保必须要传递那个java.awt.headless=true 这样才不会使用X11的环境。



或者在程序中直接写死
System.setProperty("java.awt.headless", "true");
14 楼 dikar 2012-02-22  
xiangyuwen 写道
dikar 写道
xiangyuwen 写道
dikar 写道
xiangyuwen 写道
export HADOOP_OPTS="-Djava.awt.headless=true $HADOOP_OPTS"
export HADOOP_CLIENT_OPTS="-Djava.awt.headless=true $HADOOP_CLIENT_OPTS"   在hadoop-env.sh里面加上上面2个,还是没发现有什么效果,还是报同样的问题。刚才上面那个写得有空格。


你确定你的这个参数加了是有效的,你可以看下java的启动参数中是否带有的,用ps -aux | fgrep java看看


我查看了一下,已经加进去了。我拷了一部分出来。如下: /usr/java/jdk1.6.0_24/bin/java -Xmx1000m -Djava.awt.headless=true -Dhadoop.log.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/../logs -Dhadoop.log.file=hadoop-root-tasktracker-master.log -Dhadoop.home.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/..

不知道你以前那个图像转发平台代码还有没有。能否发来看看,我的邮箱是xiangyuwen@139.com ,我为这个弄了一星期了。我把我出错的地方代码发上来,不知道你当时图像处理是怎么写的?
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);出错就是这句,可以肯定,buf不为空。
我上面是从视频文件中读出一帧,做一些处理再转发到客户端显示。


首先需要肯定一点的是,你单机运行或者单独在hadoop节点上运行都是没有问题的,说明你的程序代码是没有问题,这里唯一存在的差异是环境本身,例如环境中的参数设置等,数据传输环境等,所以你的代码应该是没有问题的。
其次我这篇文章讲述的是通过xming来做linux下的图像转发到windows,不是写程序来实现的,但是本质和你程序实现的差不多,因为这个里面也涉及到图像数据流的生成组包,通过端口转发出来,然后接收端数据流的重组展示等。所以我这边也只能帮你分析程序的流程,而不能给出可参考的代码实现等。
最后,你贴代码的地方我不太清楚会报什么错,不过我这边有2个怀疑点,仅供参考
1:你可以在这个代码执行前打印下这个值System.getProperty("java.awt.headless"),目的是确保这个参数在程序执行时已经可见,排除这个参数设置的问题。
2:你说转发到客户端显示,这里我不知道你是直接往某个端口写图像数据流还是通过其他方式,你需要确保转发前你的数据已经准备好而且是正确的数据,这样就可以将问题限制到转发这个环节,而不是生成数据这个环节。还有一点,你是否可以将获得的图像帧存为本地图像文件,而不是发往客户端,这样便于确保到底是哪个环节出现问题。
我这边不太懂图像处理方面的知识,如果有说错的地方,请指正。


1.
System.out.println("java.awt.headless = "+ System.getProperty("java.awt.headless"));
System.out.println("dd = "+GraphicsEnvironment.isHeadless());
我单独运行的时候,第一句为空,第二句为false,能转发成功,客户端能播放帧。
如果我打包后执行,用hadoop jar这个,得到同上面一样的结果,我可以肯定单独拿工程编译好的类,到节点机,用java classname,也是没有问题的。

2:如果我用以下代码强制转换:
Field defaultHeadlessField = GraphicsEnvironment.class.getDeclaredField("defaultHeadless");
   defaultHeadlessField.setAccessible(true);
   defaultHeadlessField.set(null,Boolean.TRUE);
   Field headlessField = GraphicsEnvironment.class.getDeclaredField("headless");
   headlessField.setAccessible(true);
   headlessField.set(null,Boolean.TRUE);

虽然通过System.out.println("dd = "+GraphicsEnvironment.isHeadless());
得到了TRUE,但单独运行也过不去,提示错误是:
Error instantiating class: com.sun.media.content.unknown.Handler : java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.

通过hadoop jar也是执行不过。

3.我这个是想把视频做跨屏播放,所以先取帧,再拆分发送。主要现在是他在从Buffer数据转成Image转不过去,没法存文件,保存一帧的图片文件也要先把Buffer数据转成Image,才可以保存图片文件的。我是直接
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);
//这句过不去,下面的就不执行的。这儿报
org.apache.hadoop.mapred.TaskTracker: Error running child : java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

Image[] t_img = this.splitImage(img, 1, 2); // 拆分图像。
sendImageUDP(t_img[0],t_ip[0],t_port);  //通过UDP发送图像。
本来得到Image数据后,我是直接通过UDP发送的。

应该明白我的意思了吧。我也感觉应该是系统环境参数那儿没设置对。可是该试的我都基本试过了。包括添加export DISPLAY=localhost:0 而且还在sshd_config(X11Forwarding yes)和ssh_config( ForwardX11 yes)这2个文件设置了。

好像没效果。请高手分析一下,还有那些地方没注意到。




“ Could not initialize class sun.awt.X11GraphicsEnvironment ” 这个问题如果你在linux下的话,确保必须要传递那个java.awt.headless=true 这样才会使用X11的环境。
13 楼 dikar 2012-02-22  
xiangyuwen 写道

1.
System.out.println("java.awt.headless = "+ System.getProperty("java.awt.headless"));
System.out.println("dd = "+GraphicsEnvironment.isHeadless());
我单独运行的时候,第一句为空,第二句为false,能转发成功,客户端能播放帧。
如果我打包后执行,用hadoop jar这个,得到同上面一样的结果,我可以肯定单独拿工程编译好的类,到节点机,用java classname,也是没有问题的。

2:如果我用以下代码强制转换:
Field defaultHeadlessField = GraphicsEnvironment.class.getDeclaredField("defaultHeadless");
   defaultHeadlessField.setAccessible(true);
   defaultHeadlessField.set(null,Boolean.TRUE);
   Field headlessField = GraphicsEnvironment.class.getDeclaredField("headless");
   headlessField.setAccessible(true);
   headlessField.set(null,Boolean.TRUE);

虽然通过System.out.println("dd = "+GraphicsEnvironment.isHeadless());
得到了TRUE,但单独运行也过不去,提示错误是:
Error instantiating class: com.sun.media.content.unknown.Handler : java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.

通过hadoop jar也是执行不过。

3.我这个是想把视频做跨屏播放,所以先取帧,再拆分发送。主要现在是他在从Buffer数据转成Image转不过去,没法存文件,保存一帧的图片文件也要先把Buffer数据转成Image,才可以保存图片文件的。我是直接
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);
//这句过不去,下面的就不执行的。这儿报
org.apache.hadoop.mapred.TaskTracker: Error running child : java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

Image[] t_img = this.splitImage(img, 1, 2); // 拆分图像。
sendImageUDP(t_img[0],t_ip[0],t_port);  //通过UDP发送图像。
本来得到Image数据后,我是直接通过UDP发送的。

应该明白我的意思了吧。我也感觉应该是系统环境参数那儿没设置对。可是该试的我都基本试过了。包括添加export DISPLAY=localhost:0 而且还在sshd_config(X11Forwarding yes)和ssh_config( ForwardX11 yes)这2个文件设置了。

好像没效果。请高手分析一下,还有那些地方没注意到。





1:这里我需要确定一个问题,你在单机运行成功或者在节点机,都是在linux环境下吗?
2:为了更好的理解报的异常,我找来了源码
/**
     * @return the value of the property "java.awt.headless"
     * @since 1.4
     */
    private static boolean getHeadlessProperty() {
        if (headless == null) {
            java.security.AccessController.doPrivileged(
            new java.security.PrivilegedAction() {
                public Object run() {
                    String nm = System.getProperty("java.awt.headless");
                    
                    if (nm == null) {
                        /* No need to ask for DISPLAY when run in a browser */
                        if (System.getProperty("javaplugin.version") != null) {
                            headless = defaultHeadless = Boolean.FALSE; 
                        } else {
                            String osName = System.getProperty("os.name");                        
                            headless = defaultHeadless =
                                Boolean.valueOf(("Linux".equals(osName) || "SunOS".equals(osName)) &&
                                                (System.getenv("DISPLAY") == null));
                        }
                    } else if (nm.equals("true")) {
                        headless = Boolean.TRUE;
                    } else {
                        headless = Boolean.FALSE;
                    }
                    return null;
                }
                }
            );
        }
        return headless.booleanValue();
    }


当上面这个代码返回true时就会报你上面那个错误,具体见
/**
     * @return warning message if headless state is assumed by default;
     * null otherwise
     * @since 1.5
     */
    static String getHeadlessMessage() {
        if (headless == null) {
            getHeadlessProperty(); // initialize the values 
        }
        return defaultHeadless != Boolean.TRUE ? null :
            "\nNo X11 DISPLAY variable was set, " +
            "but this program performed an operation which requires it.";
    }


你所报的异常,刚好都在我的文章里所提异常之内,我建议先把这2个异常解决掉,当然可能你尝试过各种方法,但是实际测试下,感觉你的设置貌似没有设置对(不能单看你的过程和效果,还需要检测你的设置是否正常,例如使用System直接调用返回结果看)
12 楼 xiangyuwen 2012-02-22  
dikar 写道
xiangyuwen 写道
dikar 写道
xiangyuwen 写道
export HADOOP_OPTS="-Djava.awt.headless=true $HADOOP_OPTS"
export HADOOP_CLIENT_OPTS="-Djava.awt.headless=true $HADOOP_CLIENT_OPTS"   在hadoop-env.sh里面加上上面2个,还是没发现有什么效果,还是报同样的问题。刚才上面那个写得有空格。


你确定你的这个参数加了是有效的,你可以看下java的启动参数中是否带有的,用ps -aux | fgrep java看看


我查看了一下,已经加进去了。我拷了一部分出来。如下: /usr/java/jdk1.6.0_24/bin/java -Xmx1000m -Djava.awt.headless=true -Dhadoop.log.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/../logs -Dhadoop.log.file=hadoop-root-tasktracker-master.log -Dhadoop.home.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/..

不知道你以前那个图像转发平台代码还有没有。能否发来看看,我的邮箱是xiangyuwen@139.com ,我为这个弄了一星期了。我把我出错的地方代码发上来,不知道你当时图像处理是怎么写的?
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);出错就是这句,可以肯定,buf不为空。
我上面是从视频文件中读出一帧,做一些处理再转发到客户端显示。


首先需要肯定一点的是,你单机运行或者单独在hadoop节点上运行都是没有问题的,说明你的程序代码是没有问题,这里唯一存在的差异是环境本身,例如环境中的参数设置等,数据传输环境等,所以你的代码应该是没有问题的。
其次我这篇文章讲述的是通过xming来做linux下的图像转发到windows,不是写程序来实现的,但是本质和你程序实现的差不多,因为这个里面也涉及到图像数据流的生成组包,通过端口转发出来,然后接收端数据流的重组展示等。所以我这边也只能帮你分析程序的流程,而不能给出可参考的代码实现等。
最后,你贴代码的地方我不太清楚会报什么错,不过我这边有2个怀疑点,仅供参考
1:你可以在这个代码执行前打印下这个值System.getProperty("java.awt.headless"),目的是确保这个参数在程序执行时已经可见,排除这个参数设置的问题。
2:你说转发到客户端显示,这里我不知道你是直接往某个端口写图像数据流还是通过其他方式,你需要确保转发前你的数据已经准备好而且是正确的数据,这样就可以将问题限制到转发这个环节,而不是生成数据这个环节。还有一点,你是否可以将获得的图像帧存为本地图像文件,而不是发往客户端,这样便于确保到底是哪个环节出现问题。
我这边不太懂图像处理方面的知识,如果有说错的地方,请指正。


1.
System.out.println("java.awt.headless = "+ System.getProperty("java.awt.headless"));
System.out.println("dd = "+GraphicsEnvironment.isHeadless());
我单独运行的时候,第一句为空,第二句为false,能转发成功,客户端能播放帧。
如果我打包后执行,用hadoop jar这个,得到同上面一样的结果,我可以肯定单独拿工程编译好的类,到节点机,用java classname,也是没有问题的。

2:如果我用以下代码强制转换:
Field defaultHeadlessField = GraphicsEnvironment.class.getDeclaredField("defaultHeadless");
   defaultHeadlessField.setAccessible(true);
   defaultHeadlessField.set(null,Boolean.TRUE);
   Field headlessField = GraphicsEnvironment.class.getDeclaredField("headless");
   headlessField.setAccessible(true);
   headlessField.set(null,Boolean.TRUE);

虽然通过System.out.println("dd = "+GraphicsEnvironment.isHeadless());
得到了TRUE,但单独运行也过不去,提示错误是:
Error instantiating class: com.sun.media.content.unknown.Handler : java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.

通过hadoop jar也是执行不过。

3.我这个是想把视频做跨屏播放,所以先取帧,再拆分发送。主要现在是他在从Buffer数据转成Image转不过去,没法存文件,保存一帧的图片文件也要先把Buffer数据转成Image,才可以保存图片文件的。我是直接
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);
//这句过不去,下面的就不执行的。这儿报
org.apache.hadoop.mapred.TaskTracker: Error running child : java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

Image[] t_img = this.splitImage(img, 1, 2); // 拆分图像。
sendImageUDP(t_img[0],t_ip[0],t_port);  //通过UDP发送图像。
本来得到Image数据后,我是直接通过UDP发送的。

应该明白我的意思了吧。我也感觉应该是系统环境参数那儿没设置对。可是该试的我都基本试过了。包括添加export DISPLAY=localhost:0 而且还在sshd_config(X11Forwarding yes)和ssh_config( ForwardX11 yes)这2个文件设置了。

好像没效果。请高手分析一下,还有那些地方没注意到。


11 楼 dikar 2012-02-22  
xiangyuwen 写道
dikar 写道
xiangyuwen 写道
export HADOOP_OPTS="-Djava.awt.headless=true $HADOOP_OPTS"
export HADOOP_CLIENT_OPTS="-Djava.awt.headless=true $HADOOP_CLIENT_OPTS"   在hadoop-env.sh里面加上上面2个,还是没发现有什么效果,还是报同样的问题。刚才上面那个写得有空格。


你确定你的这个参数加了是有效的,你可以看下java的启动参数中是否带有的,用ps -aux | fgrep java看看


我查看了一下,已经加进去了。我拷了一部分出来。如下: /usr/java/jdk1.6.0_24/bin/java -Xmx1000m -Djava.awt.headless=true -Dhadoop.log.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/../logs -Dhadoop.log.file=hadoop-root-tasktracker-master.log -Dhadoop.home.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/..

不知道你以前那个图像转发平台代码还有没有。能否发来看看,我的邮箱是xiangyuwen@139.com ,我为这个弄了一星期了。我把我出错的地方代码发上来,不知道你当时图像处理是怎么写的?
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);出错就是这句,可以肯定,buf不为空。
我上面是从视频文件中读出一帧,做一些处理再转发到客户端显示。


首先需要肯定一点的是,你单机运行或者单独在hadoop节点上运行都是没有问题的,说明你的程序代码是没有问题,这里唯一存在的差异是环境本身,例如环境中的参数设置等,数据传输环境等,所以你的代码应该是没有问题的。
其次我这篇文章讲述的是通过xming来做linux下的图像转发到windows,不是写程序来实现的,但是本质和你程序实现的差不多,因为这个里面也涉及到图像数据流的生成组包,通过端口转发出来,然后接收端数据流的重组展示等。所以我这边也只能帮你分析程序的流程,而不能给出可参考的代码实现等。
最后,你贴代码的地方我不太清楚会报什么错,不过我这边有2个怀疑点,仅供参考
1:你可以在这个代码执行前打印下这个值System.getProperty("java.awt.headless"),目的是确保这个参数在程序执行时已经可见,排除这个参数设置的问题。
2:你说转发到客户端显示,这里我不知道你是直接往某个端口写图像数据流还是通过其他方式,你需要确保转发前你的数据已经准备好而且是正确的数据,这样就可以将问题限制到转发这个环节,而不是生成数据这个环节。还有一点,你是否可以将获得的图像帧存为本地图像文件,而不是发往客户端,这样便于确保到底是哪个环节出现问题。
我这边不太懂图像处理方面的知识,如果有说错的地方,请指正。
10 楼 xiangyuwen 2012-02-22  
dikar 写道
xiangyuwen 写道
export HADOOP_OPTS="-Djava.awt.headless=true $HADOOP_OPTS"
export HADOOP_CLIENT_OPTS="-Djava.awt.headless=true $HADOOP_CLIENT_OPTS"   在hadoop-env.sh里面加上上面2个,还是没发现有什么效果,还是报同样的问题。刚才上面那个写得有空格。


你确定你的这个参数加了是有效的,你可以看下java的启动参数中是否带有的,用ps -aux | fgrep java看看


我查看了一下,已经加进去了。我拷了一部分出来。如下: /usr/java/jdk1.6.0_24/bin/java -Xmx1000m -Djava.awt.headless=true -Dhadoop.log.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/../logs -Dhadoop.log.file=hadoop-root-tasktracker-master.log -Dhadoop.home.dir=/home/hadoop/hadoopinstall/hadoop-0.20.2/bin/..

不知道你以前那个图像转发平台代码还有没有。能否发来看看,我的邮箱是xiangyuwen@139.com ,我为这个弄了一星期了。我把我出错的地方代码发上来,不知道你当时图像处理是怎么写的?
javax.media.Buffer buf = fgc.grabFrame();
BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
Image img = btoi.createImage(buf);出错就是这句,可以肯定,buf不为空。
我上面是从视频文件中读出一帧,做一些处理再转发到客户端显示。
9 楼 dikar 2012-02-21  
xiangyuwen 写道
http://www.itpub.net/thread-396970-1-1.html,这儿看了一下,是不是因为hadoop在子节点上运行程序的时候是通过SSH过去的。就像上面那个文章提到的一样。如果是这样,那在hadoop-env.sh中的export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"  这个参数要如何设置。楼主碰到过嘛?


hadoop是用ssh在各个子节点上执行任务的,但是我觉得和他无关,你要确保你的hadoop中运行任务的机器的启动脚本里都有加那个参数设置的,至于你上面提到的参数我没见过,所以不太清楚该如何设置。
8 楼 dikar 2012-02-21  
xiangyuwen 写道
export HADOOP_OPTS="-Djava.awt.headless=true $HADOOP_OPTS"
export HADOOP_CLIENT_OPTS="-Djava.awt.headless=true $HADOOP_CLIENT_OPTS"   在hadoop-env.sh里面加上上面2个,还是没发现有什么效果,还是报同样的问题。刚才上面那个写得有空格。


你确定你的这个参数加了是有效的,你可以看下java的启动参数中是否带有的,用ps -aux | fgrep java看看
7 楼 xiangyuwen 2012-02-21  
http://www.itpub.net/thread-396970-1-1.html,这儿看了一下,是不是因为hadoop在子节点上运行程序的时候是通过SSH过去的。就像上面那个文章提到的一样。如果是这样,那在hadoop-env.sh中的export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"  这个参数要如何设置。楼主碰到过嘛?
6 楼 xiangyuwen 2012-02-21  
export HADOOP_OPTS="-Djava.awt.headless=true $HADOOP_OPTS"
export HADOOP_CLIENT_OPTS="-Djava.awt.headless=true $HADOOP_CLIENT_OPTS"   在hadoop-env.sh里面加上上面2个,还是没发现有什么效果,还是报同样的问题。刚才上面那个写得有空格。
5 楼 xiangyuwen 2012-02-21  
export HADOOP_CLIENT_OPTS =  "-Djava.awt.headless=true $HADOOP_CLIENT_OPTS "    或 export -Djava.awt.headless=true 在hadoop-evn.sh中,启动都提示语法错误,要怎么改写呢?
4 楼 dikar 2012-02-21  
xiangyuwen 写道
我在hadoop下的conf下的hadoop-env.sh文件中找到这个变量,export HADOOP_CLIENT_OPTS="-Djava_awt.headless=true" 这样可以嘛,还是别的参数,另外发现export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"  听人说SSH也要设置,不知道是不是。我的QQ是22771432,加我,这儿发有点慢。谢谢!


抱歉,我不上qq的。

恩加到conf里就可以了。
3 楼 xiangyuwen 2012-02-21  
我在hadoop下的conf下的hadoop-env.sh文件中找到这个变量,export HADOOP_CLIENT_OPTS="-Djava_awt.headless=true" 这样可以嘛,还是别的参数,另外发现export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"  听人说SSH也要设置,不知道是不是。我的QQ是22771432,加我,这儿发有点慢。谢谢!
2 楼 dikar 2012-02-21  
xiangyuwen 写道
我碰到同样的问题,搞了一星期没搞定。我是处理图像的一个JAVA程序,单独在linux上运行,又没问题(如:java ImageDataSend),但是通过打包成JAR,然后通过其他方式运行(hadoop jar ***.jar ImageDataSend args[]),就出现Could not initialize class sun.awt.X11GraphicsEnvironment 这个问题,因为我要把方案个部署在云计算平台上,虽然云平台把此包分配到节点机上了。但我单独拿到节点机上运行也是没问题的。不知道要在那儿设置。



不好意思才看到。如果你是用hadoop的话,你可以看hadoop的启动文件或者是conf文件

-Djava.awt.headless=true 设置下这个参数
1 楼 xiangyuwen 2012-02-21  
我碰到同样的问题,搞了一星期没搞定。我是处理图像的一个JAVA程序,单独在linux上运行,又没问题(如:java ImageDataSend),但是通过打包成JAR,然后通过其他方式运行(hadoop jar ***.jar ImageDataSend args[]),就出现Could not initialize class sun.awt.X11GraphicsEnvironment 这个问题,因为我要把方案个部署在云计算平台上,虽然云平台把此包分配到节点机上了。但我单独拿到节点机上运行也是没问题的。不知道要在那儿设置。

相关推荐

    Linux下 通过jconsole远程监控weblogic

    在Linux环境下,对...通过以上步骤,你可以在本地使用JConsole有效地监控远程Linux服务器上的WebLogic 12c实例,及时发现并解决可能出现的性能问题。记住,良好的监控策略是保证应用稳定性和高可用性的重要环节。

    JConsole_远程监控Tomcat_ricky

    ### JConsole 远程监控 Tomcat 服务 #### 1. 概述 JConsole 是一个集成在 Java 开发工具包 (JDK) 中的图形用户界面 (GUI) 工具,它允许用户通过 Java 管理扩展 (JMX) 对正在运行的 Java 虚拟机 (JVM) 进行监控。...

    jconsole-1.8.0.zip

    1. **启动JConsole**:在命令行中,定位到JDK的bin目录下,运行`jconsole.exe`(Windows)或`jconsole`(Unix/Linux)。 2. **连接到应用程序**:JConsole启动后,可以选择本地进程或远程连接。对于本地进程,直接...

    Jconsole监控Java应用

    要使用Jconsole对Java应用程序进行监控,需要在Linux机器上安装JDK,并配置JDK的环境变量。此外,还需要在本地安装图形化连接工具,如Xmanager。 操作步骤 1. 本地启动Xmanager中的Xmanager - Passive工具,启动后...

    jconsole配置

    - 在Linux服务器上,编辑Tomcat的`bin/catalina.sh`文件,在`# OS specific support.`这一行之后添加JMX相关参数,如: ``` JAVA_OPTS="-Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management....

    jconsole使用

    博文链接:https://balaschen.iteye.com/blog/125014

    jconsole-tomcat配置

    ### jconsole-tomcat配置详解 #### 一、引言 在现代软件开发与运维过程中,性能监控与故障排查是确保应用稳定运行的关键环节之一。作为一款广泛使用的Java应用服务器,Tomcat同样需要进行细致的监控与管理。而...

    使用Jconsole对java的内存使用情况(JVM)进行监控参照.pdf

    使用Jconsole对Java的内存使用情况(JVM)进行监控参照 JDK1.5提供了JMX remote的管理工具Jconsole,可以监控Java运行程序的内存使用情况、活动线程数量、类装载的数量、MBeans的状态、虚拟机的各种信息等,还可以...

    jconsole远程监控配置手册(经典)

    ### jconsole远程监控配置手册(经典) #### 一、引言 本文档旨在提供一份详细的jconsole远程监控配置指南,适用于需要对生产环境中的Tomcat应用服务器进行远程监控的场景。通过本指南,用户可以了解到如何正确配置...

    linux下tomcat优化设置最大连接数内存jconsole监控.docx

    ### Linux 下 Tomcat 优化设置最大连接数及内存 JConsole 监控 #### 一、Tomcat 内存优化 ##### 1.1 基本原理 在启动 Java 应用程序时,JVM(Java 虚拟机)会为应用程序分配一定的初始内存和最大内存。这些设置对...

    jconsole+tomcat配置说明 附加Tomcat内存说明(基于jdk5.0).docx )

    例如,Unix/Linux系统下使用`ps`命令查找Java进程的PID,Windows系统则可以通过任务管理器或`jps`命令获取。连接命令格式为`jconsole [PID]`。 3. **远程监控**: 若要远程监控Java应用,需要知道目标主机的IP地址或...

    The jconsole Tool-introduction.doc

    在Unix或Linux系统上,可以通过`ps`命令查找java进程的PID;在Windows系统上,可以通过任务管理器查找java或javaw进程的PID;另外,也可以使用`jps`命令行工具来获取进程ID。 例如,如果测试应用的PID为2956,启动...

    公司内部培训jconsole

    对于远程调试,可以使用 `-Xdebug`、`-Xnoagent`、`-Djava.compiler=NONE` 和 `-Xrunjdwp` 参数来配置,例如在 Linux 环境下,通过 `startup.sh jpda` 启动服务,默认监听8000端口。在 Eclipse 等集成开发环境中,也...

    jdk-8u261-linux-x64.tar linux jdk

    在安装JDK 8u261后,开发者可以使用`javac`命令进行Java源代码的编译,`java`命令来运行Java程序,`jar`工具来创建和管理Java档案文件,以及其他如`jconsole`或`jvisualvm`等工具进行性能监控和分析。这个版本的JDK...

    最新版linux jdk-8u291-linux-x64.tar.gz

    JDK是Java开发的核心组成部分,包含了Java编译器(javac)、Java运行时环境(JRE)、调试工具(如jdb和jconsole)、性能分析工具(如jmap和jhat)以及许多其他实用工具。对于开发者而言,它是构建、测试和运行Java...

    jdk6-linux

    - `jmap`, `jhat`, 和 `jconsole`等工具进行内存分析和性能监控。 - `javaws`支持Java Web Start技术,允许用户通过浏览器启动Java应用程序。 总之,"jdk6-linux"是Linux系统上的Java开发基础,为开发者提供了在...

    最新版linux jdk-18_linux-x64_bin.tar.gz

    JDK 18还可能包含用于调试、性能分析和监控的工具,如JVisualVM和JConsole,这些都是开发者日常工作中不可或缺的工具。 8. **Java SE标准**: JDK 18遵循Java Standard Edition (SE) 规范,提供了标准的Java API...

    linux-jdk1.8版本

    4. **开发工具**:如jar工具、javadoc工具、jconsole等,帮助开发者打包、文档化和监控Java应用。 在Linux环境中,JDK1.8.0_151是一个重要的版本,它包含了许多优化和新特性,比如Lambda表达式、Stream API、新的...

    jre-8u321-linux-x64(linux_jdk安装包)

    - `jconsole`和`jvisualvm`:监控和分析Java应用性能的工具。 - `jmap`、`jhat`和`jstack`:用于诊断和故障排查的工具。 在Linux系统上,你可以通过命令行直接调用这些工具,例如`javac HelloWorld.java`来编译名为...

Global site tag (gtag.js) - Google Analytics