关于libjnotify.so的版本在linux上不兼容的问题解决

一、问题描述

SEVERE: Servlet [InitServlet] in web application [] threw load() exception
java.lang.UnsatisfiedLinkError:/payment/tomcats/tomcat-payment-gateway/lib/libjnotify.so:/lib64/libc.so.6:version`GLIBC_2.12’not found (required by /payment/tomcats/tomcat-payment-gateway/lib/libjnotify.so)

<!–more>

二、解决办法

###方法一:重新编译jnotify生成libjnotify.so
1、使用[strings /lib64/libc.so.6 | grep GLIBC] 查看支持系统中的GLIBC版本
payment@test1:~/tomcats/tomcat-payment-gateway/logs> strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_PRIVATE

发现系统的glibc比较老旧,最新的为GLIBC_2.11。

2、为了安全和稳定起见,自己编译jnotify的代码生成libjnotify.so

3、执行 gcc -I /usr/java/jdk1.7.0_80/include/ -I /usr/java/jdk1.7.0_80/include/linux/ -fPIC -g -c net_contentobjects_jnotify_linux_JNotify_linux.c -o libjnotify.o
会看到多个libjnotify.o

4、执行 gcc -g -shared -W1 -o libjnotify.so libjnotify.o -lc
就会看到 libjnotify.so

5、然后把 libjnotify.so复制到java.library.path下面去就行了

方法二:升级GLIBC

1、glibc下载地址:http://ftp.gnu.org/gnu/glibc/
2、解压
$ mv glibc-ports-2.15 glibc-2.15/ports
$ mkdir glibc-build-2.15 &&cd glibc-build-2.15
$ ./glibc-2.15/configure --prefix=/usr/local/glibc_mips CC=mipsel-linux-gcc --host=mipsel-linux --build=i686-pc-linux-gnu --enable-add-on=nptl libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_mips_tls=yes libc_cv_gnu99_inline=yes

3、第2步没问题执行
$ make &&make install
4、查看是否升级完成
$ ls -l /lib/libc.so.6
输出:lrwxrwxrwx 1 root root 14 Jun 16 11:24 /lib/libc.so.6 -> libc-2.12.3.so
说明升级完成。

三、参考链接:

http://blog.csdn.net/akon_vm/article/details/9329089
http://blog.csdn.net/ldl22847/article/details/18702645

PS:
1、64位linux系统可以运行32位和64位程序,32位系统只能运行32位程序
2、file topas可以检查这个文件是32位还是64位
3、ldd topas可以检查这个文件需要哪些依赖库文件,可能依赖的库文件libG4processes.so是32位不满足需求

RestEasy统一异常处理问题,处理之后前端一直处于等待状态未返回异常结果

RestEasy统一异常处理问题,处理之后前端一直处于等待状态未返回异常结果
问题描述:
在RestEasy使用自定义统一异常处理之后,但是前端一直未能收到后台返回结果,但是后台已经执行完毕,跟踪了源码发现没有什么异常情况。
使用jstack分析了堆栈也没有发现死锁或者阻塞,而且排查代码也没有发现有死循环之类的问题,但是一直没有返回,当把自定义异常处理屏蔽掉之后使用框架自带的异常,发现能够返回异常信息
,这就非常奇怪。

JVM工具

jps

JPS 查看当前运行java进程
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。

用法

1
2
3
4
jps -lvm 用于查看当前机器上运行的java进程。 

命令格式 jps [options] [hostid]
注:如果不指定hostid就默认为当前主机或服务器。

参数

常用命令行参数选项说明如下:

-q  不输出类名、Jar名和传入main方法的参数

-m 输出传入main方法的参数

-l   输出main类或Jar的全限名

-v  输出传入JVM的参数

-V 输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数-XX:Flags=指定的文件)。

-J 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。

jps有问题, 使用 jps -J-Djps.debug=true -J-Djps.printStackTrace=true 可以获得Jps错误详细信息

1、hexo使用指南

hexo使用指南

安装Git

gitforwindos : https://gitforwindows.org/

git downloads : https://git-scm.com/downloads
以上两个地址都可以下载安装,安装步骤参其他文档。

安装nodeJS

官方网址:http://nodejs.cn/download/
进入官方地址进行下载然后安装,安装步骤很简单,就不进行演示了。

安装hexo

在安装hexo之前假设你已经有了github账号了,以及安装了上述的git和nodejs环境。

创建安装目录

首先需要创建一个安装目录用于安装hexo,然后我这里创建了一个blog目录。