Solaris 10下Java Runtime Environment出错的一例修复
前些天一台Sun服务器上的Sybase 出错,不能备份,恢复数据库,重装了Backup Server也没解决问题,
遂准备重装Sybase. 没想到执行install时候,出现一个错误,
/dev/zero: (No such file or directory),连安装界面都没出来就中止了。
经检查,估计是机器上的JRE环境出错了。
然后 运行 java -version测试一下,出现下列错误,
Log文件内容如下:
#
# An unexpected error has been detected by Java Runtime Environment:
#
# Internal Error (os_solaris.cpp:4615), pid=3235, tid=2
# Error: os::init: cannot open /dev/zero (No such file or directory)
#
# Java VM: Java HotSpot(TM) Server VM (10.0-b23 mixed mode, sharing solaris-sparc)
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread is native thread
Stack: [0xfe480000,0xfe500000], sp=0xfe4ffa00, free space=510k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x766ebc]
V [libjvm.so+0x3fde84]
V [libjvm.so+0x248fdc]
V [libjvm.so+0x71a7c0]
V [libjvm.so+0x254df4]
C [java+0x2650] main+0x1080
--------------- P R O C E S S ---------------
VM state:not at safepoint (not fully initialized)
VM Mutex/Monitor currently owned by a thread: None
Dynamic libraries:
0x00010000 /export/jre1.6.0_07/bin/java
0xff3ec000 /lib/libthread.so.1
0xff380000 /export/jre1.6.0_07/bin/../lib/sparc/jli/libjli.so
0xff350000 /lib/libdl.so.1
0xff200000 /lib/libc.so.1
0xff3a0000 /platform/SUNW,Sun-Fire-V240/lib/libc_psr.so.1
0xfe800000 /export/jre1.6.0_07/lib/sparc/server/libjvm.so
0xff300000 /lib/libsocket.so.1
0xff330000 /usr/lib/libsched.so.1
0xff1d0000 /lib/libm.so.1
0xff190000 /usr/lib/libCrun.so.1
0xff170000 /lib/libdoor.so.1
0xfe700000 /lib/libnsl.so.1
0xfe600000 /lib/libm.so.2
0xfe7d0000 /lib/libscf.so.1
0xfe6e0000 /lib/libuutil.so.1
0xfe5e0000 /lib/libgen.so.1
0xfe5b0000 /lib/libmd.so.1
0xfe590000 /platform/SUNW,Sun-Fire-V240/lib/libmd_psr.so.1
0xfe570000 /lib/libmp.so.2
VM Arguments:
java_command: <unknown>
Launcher Type: SUN_STANDARD
Environment Variables:
PATH=/usr/sbin:/usr/bin
LD_LIBRARY_PATH=/export/jre1.6.0_07/lib/sparc/server:/export/jre1.6.0_07/lib/sparc:/export/jre1.6.0_07/../lib/sparc
SHELL=/sbin/sh
Signal Handlers:
SIGSEGV: [libjvm.so+0x767c10], sa_mask[0]=0xffbffeff, sa_flags=0x00000004
SIGBUS: [libjvm.so+0x767c10], sa_mask[0]=0xffbffeff, sa_flags=0x00000004
SIGFPE: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGPIPE: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGXFSZ: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGILL: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGUSR2: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGQUIT: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGHUP: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGINT: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGTERM: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGUSR2: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
--------------- S Y S T E M ---------------
OS: Solaris 10 8/07 s10s_u4wos_12b SPARC
Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 16 August 2007
uname:SunOS 5.10 Generic_120011-14 sun4u (T1 libthread)
rlimit: STACK 8192k, CORE infinity, NOFILE 256, AS infinity
load average:0.08 0.06 0.05
CPU:total 2
Memory: 8k page, physical 4194304k(3423904k free)
vm_info: Java HotSpot(TM) Server VM (10.0-b23) for solaris-sparc JRE (1.6.0_07-b06), built on Jun 10 2008 01:39:38 by "" with Workshop 5.8
time: Mon Jul 28 14:35:40 2008
elapsed time: 0 seconds
然后到SUN网站下载新的JRE, 版本jre1.6.0_07
jre-6u7-solaris-sparc.sh
jre-6u7-solaris-sparcv9.sh
./jre-6u7-solaris-sparc.sh
./jre-6u7-solaris-sparcv9.sh
尝试重新安装JRE,
结果在出现那个License之后,按Yes继续,系统就提示
文件可能损坏,请不要再尝试安装这个文件。
郁闷的不行,只好再从错误提示看起,先找找/dev/zero到底在不在,
到/dev下找了找,没找到这个zero的设备。
到网上查了一下/dev/zero这个设备是什么设备,
答案是
永远输出0的设备,比如可以用来生成内容全为0的文件,或是安全擦除文件内容
又碰巧查到一个文章
http://www.yesadmin.com/351/137537/index.html,讲到这个设备
然后通过
cd /dev
bash-3.00# mknod zero c 13 12
创建/dev/zero这个Device,
再运行
Java的安装,成功!
java -version也能正确显示信息。
然后在Sybase目录下重新执行
./install
出现熟悉的图形界面安装程序。后续安装一切顺利。
没准儿当初的Sybase Backup Server就是依赖于这么个设备,才无法正常执行任务,可惜已经把原来的Sybase删除掉了,没法验证。
由于网上文章实在有限,把过程大致整理了一下,以供后来人参考。