关于LogStash运行在AIX 64位机器上的问题与临时解决方案

需求;logstash运行在SUSE,LINUX,PPC LINUX,AIX机器上,并监控文件发送日志到KAFKA中去,

问题:在AIX机器上,file插件总是报异常,无法完成数据的读取

NotImplementedError: stat.st_dev unsupported or native support failed to load

分析:环境 :AIX 64 OSLEVEL :6.1.0 7.1.0

JDK : IBM JAVA 71 64

报错显示:是在获取设备的主辅号时出了问题,显示没有实现的本地方法,没有详细的报错信息,

我同事细查相关的JAVA源码,一步一步地添加一些日志输出,找到了报错的具体原因.

我们看LOGSTASH的VENDOR JRUBY中就会发现,它的/vendor/jruby/lib/jni

下面没有 PPC64-AIX文件夹,所以具体报错的原因是没有找到相对应的JNI需要调用的本地库文件.

解决方案:

1.编译一份AIX-64位的LIB库文件放置到PPC64-AIX文件夹下

这个过程比较困难,相关的同事说做起来比较麻烦

2.临时解决方案,

使用32位的JDK,因为JRUBY自身带有32位的库文件,然后修改一个地方:

我们直接修改源码部分:

https://github.com/jnr/jnr-posix/blob/master/src/main/java/jnr/posix/POSIXFactory.java

中返回AIX类的固定让它反回32位的库文件.

case AIX:
                return jnr.ffi.Runtime.getSystemRuntime().addressSize() == 4
                    ? new String[] { "libc.a(shr.o)" }
                    : new String[] { "libc.a(shr_64.o)" };
写死成:return new String[]{"libc.a(shr.o)"}

重新编译,把编译后的类替换原来jruby.jar包中相关的class文件,重新打包即可.

jar cMf ../jruby.jar *

java 调用本地库文件来实现某些功能,JRUBY使用JNR/JFFI第三方提供的包来做这件事.

时间: 2024-10-10 11:51:43

关于LogStash运行在AIX 64位机器上的问题与临时解决方案的相关文章

C++对象在64位机器上的内存布局

前两天读了陈皓两篇关于虚函数表的博客, 正如他在博客中说的那样, 由于年代久远, 所有的测试代码都是在32位机上跑的, 按照作者的思路, 针对64位机, 我仿写了那些代码, 在移植到64位的过程中碰到了一些坑, 也学到了一些小工具, 现在记录在这里. **1.`-fdump-class-hierarchy`选项结合`c++filt`可以得到`gcc`环境下的虚函数表**: 只要我们在编译的时候加上`-fdump-class-hierarchy`选项, 就可以在源文件件的同目录下得到一个以`.cl

【转载】GetAdaptersInfo函数在64位系统上返回ERROR_NOACCESS的有关问题

From:http://www.educity.cn/wenda/351190.html GetAdaptersInfo函数在64位系统下返回ERROR_NOACCESS的问题 实际应用中一个程序在长时间运行后内存占用较高时发生崩溃,从dump信息中,发现GetAdaptersInfo函数返回了一个奇怪的错误码998(ERROR_NOACCESS),百度搜索不到相关的信息.MSDN上GetAdaptersInfo函数的错误码正常情况下只有5种.并且一共发生的两次崩溃都出现在一台Win7 64位机

32位程序在64位系统上获取系统安装时间(要使用KEY_WOW64_64KEY标记)

众所周知,取系统的安装时间可取注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion的子项InstallDate,此值是个DWORD类型的UnixStamp.  但是在64位系统上有所不同(仅测试了win7.win8),默认情况下32程序在64位机器上访问的是下面这个地址HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion

windows Server 2008 64位机器装了一个10g客户端,Oracle数据库连接不上问题解决。

windows Server 2008 64位机器装了一个10g客户端,32和64位不清楚 用Netmanager里面的服务名连.Data Source=o10ga;user id=DJZD;password=cy2015;直接显示Tns12514错误,库连接不上... 若改用 Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.72.5.13) (PORT=1521))(ADDRESS=(PROTOCOL

iOS开发:在多平台、设备及64位架构上运行

最近在新工程上线是遇到很多适配的问题,尤其是旧工程64位设备的适配,现在整理一下. Base SDK vs. Deplyment Target 1.配置Base SDK设置 1)选择工程导航面板上的工程文件 2)编辑面板上搜索base sdk Base SDK设置引导编译器使用该版本的SDK编译和构建应用,也就是说,它会直接控制应用使用哪些API. 2.Deplyment Target运行应用需要的最低操作系统版本 支持多个SDK时的注意事项: 框架的可用性有时新的SDK会增加一个完整框架,较早

一个伟大的发现,装X一下。笔记本win7系统64位机器执行unity 时,屏幕模糊解决的方法

笔者笔记本win7系统64位机器执行unity 时.往往切换时unity界面屏幕模糊,后来发现此时须要下载DirectXRuntimes201006x64,安装就可以.

关于在64位系统上,使用APlayer,运行报错“找不到指定的模块”

使用APlayer开发了一个C#程序,原先开发电脑是32位的,安装电脑也是32位,只需要将相应的文件打包,然后在system32文件夹中放入atl71.dll和D3DX9_43.dll,项目运转正常.但后来因为系统升级,换了台win10 64位的系统,开发时只需将项目的平台换成x86,但是打包后安装却报错,且system32下的两个dll已存在.经过一天的摸索,因为64位系统有个SysWOW64  文件夹,将所需的两个dll放入此文件夹,问题得已解决. 网上查出两个文件夹的区别 \Windows

在64位linux上编译32位程序

ld指令有一个选项:--oformat output_format,用于指定输出文件的格式.输入文件./kernel/kernel.o等是elf32格式,当前系统是64位,而ld默认生成的文件格式是elf64-x86-64:因此会出现"ld: warning: i386 architecture of input file `./kernel/kernel.o' is incompatible with i386:x86-64 output"这样的提示.之前,将系统从三墩转移到我自己的

【转】将 Linux 应用程序移植到 64 位系统上

原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软件已经变得比以前更为重要.在本文中,您将学习如何在进行语句声明.赋值.位移.类型转换.字符串格式化以及更多操作时,防止出现可移植性缺陷. 0 评论: Harsha S. Adiga, 软件工程师, IBM 2006 年 5 月 18 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个