fuse java_java中的Fuse文件系统 - JVM错误双重免费或损坏
我正在使用jnr-fuse库(https://github.com/SerCeMan/jnr-fuse)在java中编写Fuse-Filesystem,它在内部使用JNR进行本机访问。
文件系统作为Amazon S3存储桶的前端,基本上允许用户将其存储桶作为普通存储设备安装。
在重新处理我的read方法时,我遇到了以下JVM错误:
*** Error in `/usr/local/bin/jdk1.8.0_65/bin/java': double free or corruption (!prev): 0x00007f3758953d80 ***
尝试将文件从fuse-filesystem复制到本地FS时总会发生错误,通常是在第二次调用read方法时(对于第二个128kByte数据块)
cp /tmp/fusetest/benchmark/benchmarkFile.large /tmp
有问题的阅读方法是:
public int read(String path, Pointer buf, @size_t long size, @off_t long offset, FuseFileInfo fi) {
LOGGER.debug("Reading file {}, offset = {}, read length = {}", path, offset, size);
S3fsNodeInfo nodeInfo;
try {
nodeInfo = this.dbHelper.getNodeInfo(S3fsPath.fromUnixPath(path));
} catch (FileNotFoundException ex) {
LOGGER.error("Read called on non-existing node: {}", path);
return -ErrorCodes.ENOENT();
}
try {
// *** important part start
InputStream is = this.s3Helper.getInputStream(nodeInfo.getPath(), offset, size);
byte[] data = new byte[is.available()];
int numRead = is.read(data, 0, (int) size);
LOGGER.debug("Got {} bytes from stream, putting to buffer", numRead);
buf.put(offset, data, 0, numRead);
return numRead;
// *** important part end
} catch (IOException ex) {
LOGGER.error("Error while reading file {}", path, ex);
return -ErrorCodes.EIO();
}
}
使用的输入流实际上是缓冲区上的ByteArrayInputStream,我用它来减少与S3的http通信。
我现在在单线程模式下运行保险丝,以避免任何与并发相关的问题。
有趣的是,我已经有一个没有进行任何内部缓存的工作版本,但其他方面与此处显示的完全相同。
不幸的是我并没有真正进入JVM内部,所以我不确定如何找到底层 - 正常的调试没有产生任何结果,因为实际错误似乎发生在C端。
这里是上述命令触发的读操作的完整控制台输出:
2016-02-29 02:08:45,652 DEBUG s3fs.fs.CacheEnabledS3fs [main] - Reading file /benchmark/benchmarkFile.large, offset = 0, read length = 131072
unique: 7, opcode: READ (15), nodeid: 3, insize: 80, pid: 8297
read[0] 131072 bytes from 0 flags: 0x8000
2016-02-29 02:08:46,024 DEBUG s3fs.fs.CachedS3Helper [main] - Getting data from cache - path = /benchmark/benchmarkFile.large, offset = 0, length = 131072
2016-02-29 02:08:46,025 DEBUG s3fs.fs.CachedS3Helper [main] - Path /benchmark/benchmarkFile.large not yet in cache, add it
2016-02-29 02:08:57,178 DEBUG s3fs.fs.CachedS3Helper [main] - Path /benchmark/benchmarkFile.large found in cache!
read[0] 131072 bytes from 0
unique: 7, success, outsize: 131088
2016-02-29 02:08:57,179 DEBUG s3fs.fs.CachedS3Helper [main] - Starting actual cache read for path /benchmark/benchmarkFile.large
2016-02-29 02:08:57,179 DEBUG s3fs.fs.CachedS3Helper [main] - Reading data from cache block 0, blockOffset = 0, length = 131072
2016-02-29 02:08:57,179 DEBUG s3fs.fs.CacheEnabledS3fs [main] - Got 131072 bytes from stream, putting to buffer
2016-02-29 02:08:57,180 DEBUG s3fs.fs.CacheEnabledS3fs [main] - Reading file /benchmark/benchmarkFile.large, offset = 131072, read length = 131072
unique: 8, opcode: READ (15), nodeid: 3, insize: 80, pid: 8297
read[0] 131072 bytes from 131072 flags: 0x8000
2016-02-29 02:08:57,570 DEBUG s3fs.fs.CachedS3Helper [main] - Getting data from cache - path = /benchmark/benchmarkFile.large, offset = 131072, length = 131072
2016-02-29 02:08:57,570 DEBUG s3fs.fs.CachedS3Helper [main] - Path /benchmark/benchmarkFile.large found in cache!
2016-02-29 02:08:57,570 DEBUG s3fs.fs.CachedS3Helper [main] - Starting actual cache read for path /benchmark/benchmarkFile.large
2016-02-29 02:08:57,571 DEBUG s3fs.fs.CachedS3Helper [main] - Reading data from cache block 0, blockOffset = 131072, length = 131072
2016-02-29 02:08:57,571 DEBUG s3fs.fs.CacheEnabledS3fs [main] - Got 131072 bytes from stream, putting to buffer
read[0] 131072 bytes from 131072
unique: 8, success, outsize: 131088
*** Error in `/usr/local/bin/jdk1.8.0_65/bin/java': double free or corruption (!prev): 0x00007fcaa8b30c80 ***
fuse java_java中的Fuse文件系统 - JVM错误双重免费或损坏相关推荐
- linux fuse安装脚本,Linux FUSE(用户态文件系统)的使用:用libfuse创建FUSE文件系统...
说明 FUSE 是Linux Kernel的特性之一:一个用户态文件系统框架,a userspace filesystem framework. 形象的说就是可以在用户态运行一个程序,这个程序暴露出一 ...
- 尚硅谷-宋红康-JVM上中下篇完整笔记-JVM上篇_内存与垃圾回收篇
前言 一.jvm及java体系结构 1. Java及JVM简介 TIOBE语言热度排行榜 https://www.tiobe.com/tiobe-index/ 世界上没有最好的编程语言,只有最适用于具 ...
- Windows Server 2003 R2中的“分布式文件系统”案例应用
"分布式文件系统(DFS)"是从Windows 2000 Server开始提供的服务,用于将企业网络中分散的多台服务器进行集中管理并对外提供统一的访问.启用DFS后,网络中的用户只 ...
- eclipse java 1.8 vm_GGTS(Eclipse)和JAVA 1.8中不兼容的JVM
由于升级到Java 1.8,在GGTS(日食)中运行grails应用程序时遇到了一些问题. 堆栈开始于: Mar 05, 2015 3:51:31 PM org.springsource.loaded ...
- jvm 错误_JVM因“ OutOfMemory”错误而关闭-我该怎么办?
jvm 错误 看起来似乎很神奇,但是在有关JVM设置的搜索请求结果中经常显示"来自深度"的特定呼声. 您可能会遇到"我记得那个选项,但如何启用它"的问题,而有时 ...
- 使用fuse.js_如何使用Fuse.js将搜索添加到React应用
使用fuse.js Search is a powerful way help people visiting your site find the content that's most impor ...
- 解析 Linux 中的 VFS 文件系统机制
简介: 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核.总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 V ...
- Team Foundation 中的带编号的错误和事件消息
Team Foundation 中的带编号的错误和事件消息 Team Foundation 通过显示错误消息和事件消息来通知您操作成功以及操作失败.一部分错误消息和事件消息已经指定了格式为 TFnnn ...
- 解析Linux中的VFS文件系统机制
文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核.总体上说Linux下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virt ...
最新文章
- 【C/C++学院】0831-类与对象的异常/面试100题1-100
- Linux系统的启动过程
- 024 Android 自定义样式对话框(AlertDialog)
- 2013年 省职业学校 公共基础课程 两课 评比 计算机应用,江苏省职业学校公共基础课程两课评比教案.doc...
- 如何判断脚本执行成功
- pandas 非聚合函数
- xhtml css 漏 整理
- 解决cv2.error: OpenCV(xxx) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp问题
- 初二生态系统思维导图_鑫讲堂:初二年级十一月微讲座汇报(二)
- java后端开发项目流程_Java项目——后端笔记
- vivo手机自启动及定时开关机
- 达梦数据库-Dmpython+xlrd实现excel表数据一键入库代码分享
- TextView英文自动换行解决方法
- RTX 2013安装破解文档
- 14年macmini装双硬盘_苹果2014款Mac mini更换固态硬盘图文教程
- 《当程序员的那些狗日日子》五
- 使用memcpy函数的耗时测试(拷贝不同大小数据量耗时不同)
- Boss爬虫prd文档
- 浅谈微信三级分销系统的漏洞
- 迅为i.MX6ULL 开发板开机进度条修改文档
热门文章
- php sprintf %1,PHP sprintf() 函数的应用(定义和用法)
- eclipse java jdk_设置Eclipse和Java JDK
- python listbox输入内容自动换行_python中的图像界面设计(二)
- VS+Qt modules项目后期勾选Network、XML等
- mysql 配置分区_Mysql的分区配置实验
- Linux引到过程与服务控制
- mq同步mysql数据 duplicate entry_MySQL数据同步之otter
- python元素定位id和name_Python Selenium定位html元素|find_element_by_class-name-id-tag-css-xpath-text...
- python两列字符串合并_python两列字符串如何合并?
- linux deploy 版本,Linux Deploy