minio java client 使用okhttp作为底层的http实现,在产品包里面局域网上传文件的速度一直只有400~800KB/s,经过一天排查发现是-Djava.compile=none禁用了即时编译导致。

发现问题的场景

minio-java的使用架构图是这样的:

 [Minio Server]<--nginx <== Proxy(Socks5 Sever) <== Agent(minio-java on top of okhttp)
and
[Minio Server]<--nginx <== Browser(minio-js api)

行云管家发布的第一个私有云版本(即4.0),由于网络需要完全隔离,行云管家的团队网盘功能,无法使用阿里云的OSS以及腾讯云的COS作为媒介,经过多方考察,我们选用了MINIO作为服务端存储的解决方案。minio-java适配很顺利,毕竟它是兼容亚马逊S3的,而阿里云的OSS跟S3穿的是一条裤子,minio-java底层使用的是okhttp,添加socks代理支持也不在话下。

问题来了,正式发版以后,一个同事测试文件采集,上传一个1.2G的文件用了50分钟左右,私有部署跟Proxy以及Agent都安装在一台机器上,带宽理论上来说至少是百兆,速度应该不会低于10MB/s才正常。实测发现,Agent在minio-java情况下的上传速度不超过800KB/s.

排查问题

是不是MINIO Server的问题?

检查了MINIO Server的配置,都是是默认的,使用团队网盘网页上传文件速度能接近带宽速度(minio-js api),证明MINIO Server和前置的nginx都没有问题。

是不是okhttp使用代理导致的?

Socks5代理Server是在Proxy进程里面启动的,从开发上线到现在只经历大概两个版本的迭代,如果有隐藏bug确实不容易暴露的。我这么排查:还是用Agent采集文件,不过网盘分别是OSS和COS,速度都可以达到2~5MB/s,都走Socks5代理,这个速度是正常的,远远超过minio-java的速度。所以可以证明不是代理导致(我的代理程序还是相当靠谱的)。

定位到Wrapper

我在idea里面启动Agent实例测试,发现速度接近带宽速度。idea里面的进程跟安装后的Agent最大的区别是:Agent是被java service wrapper包装启动的,而Java代码是一模一样的。于是我替换Agent的jre,调整内存等参数,都没找到问题。

然后我升级了wrapper的版本到最新版,速度依然很慢。

定位到java.compile=none

我把速度正常的进程启动参数和安装Agent的启动参数拿下来逐一对比,排除了一些明显不可能的参数之后,发现安装Agent里面有一个参数java.compile=none,把这个参数去掉以后,Agent文件采集的速度果然恢复正常:达到15MB/s。

速度慢的原因

Java程序是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某些代码执行非常频繁时,会把这些代码认定为热点代码。为了提高热点代码的执行效率,在运行时,即时编译器(JIT,Just In Time Compiler)会把热点代码编译成本地平台相关的机器码。随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。

虚拟机参数:java.compile=none是禁用即时编译的意思,去掉这个配置即可(默认是开启的)。我已经忘记这个参数是怎么配置上去的了,或许是wrapper的默认配置?

我是如何让minio client上传速度提高几十倍的的更多相关文章

  1. 通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍

    通过非聚集索引,可以显著提升count(*)查询的性能. 有的人可能会说,这个count(*)能用上索引吗,这个count(*)应该是通过表扫描来一个一个的统计,索引有用吗? 不错,一般的查询,如果用 ...

  2. 关于主机FTP连接不上,无法列出目录,列表错误,上传速度慢,掉速的解决办法

    FTP是一种文件传输协议,它支持两种模式: 一种方式叫做Standard (也就是 Active,主动方式), 一种是 Passive (也就是PASV,被动方式). Standard模式 FTP的客 ...

  3. jersey client上传下载文件

    jersey client上传文件demo File file = new File("/tmp/test.jpg"); System.out.println(file.exist ...

  4. 【安富莱专题教程第6期】SEGGER的J-Scope波形上位机软件,RTT模式波形上传速度可狂飙到500KB/S左右

    说明:1.在实际项目中,很多时候,我们需要将传感器或者ADC的数值以波形的形式显示.通常的解决办法是用串口上位机,USB接口上位机或者MDK的逻辑分析仪功能,使用这三种方式都比较繁琐.本期专题为大家讲 ...

  5. js 文件异步上传 显示进度条 显示上传速度 预览文件

    通常文件异步提交有几个关键 1.支持拖拽放入文件.2.限制文件格式.3.预览图片文件.4.上传进度,速度等,上传途中取消上传.5.数据与文件同时上传 现在开始笔记: 需要一个最基础的元素<inp ...

  6. 解决ansible上传速度慢的问题

    问题: 假如有A.B.C.D....等机器,机器A为Ansible服务器,机器B.C.D...等为Ansible管理的节点服务器,A机器与其他机器都不在同一个网络,也就是A机器必须添加VPN之后才能与 ...

  7. 迅雷在P2P网络中的另类上传速度

    如上图,我们一般在下载BT时,一般P2P是边下载边上传. 但是迅雷在自己的软件中可以设置上传速度,反而在展示时却把P2P协议的速度不在上传那么显示,而是使用协议速度来进行展示:并且这个速度无法设置. ...

  8. Ubuntu 16.04通过Trickle限制某个软件的下载/上传速度

    在Linux下没有Windows使用360那样去限制某个软件的速度. 但是通过Trickle可以设置某个软件的网速,但是前提是通过Trickle命令连带启动这个软件才可以,不能中途去设置. 比如现在很 ...

  9. 文件上传速度查询方法(watch工具)

    由于业务迁移,需要将大量文件拷贝到目标机器上的/mnt目录,在拷贝过程中,想要查看上传的速度,做法如下:[root@mail01 ~]# du -sh /mnt5.6G /mnt[root@mail0 ...

随机推荐

  1. [51nod1610]路径计数

    路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图. T次修改操作,每次修改一条边的边权,每次修改后输出有向无环图上路径的值为1的路径数量(对1,000,000,007取模). Inp ...

  2. HDU-5340 Three Palindromes(字符串哈希)

    http://acm.hdu.edu.cn/showproblem.php?pid=5340 orz到了新的字符串hash姿势 #include<cstdio>#include<cs ...

  3. c++(爬楼梯)

    前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以 ...

  4. [国嵌攻略][051][NandFlash原理解析]

    扮演角色 相当于嵌入式设备的硬盘 NandFlash分类 1.SCL(single level cell):单层式存储 2.MLC(multi level cell):多层式存储 3.SCL在存储格上 ...

  5. 初识Spider_Man(爬爬虫)

    一:引子

  6. 转:C++与JAVA语言区别

    转自:http://club.topsage.com/thread-265349-1-1.html Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同: (1)Java比C++程 ...

  7. Spark算子--coalesce和repartition

    coalesce和repartition--Transformation类算子 代码示例

  8. 跟我一起读postgresql源码(十三)——Executor(查询执行模块之——Join节点(上))

    Join节点 JOIN节点有以下三种: T_NestLoopState, T_MergeJoinState, T_HashJoinState, 连接类型节点对应于关系代数中的连接操作,PostgreS ...

  9. lnmp一键安装的卸载

    http://blog.csdn.net/lansetiankong12/article/details/48130507  如果是lnmp一键安装的 进入安装包目录 [root@www home]# ...

  10. dedecms 图集标签{dede:productimagelist} {dede:field name='imgurls'}&nbs

    1.{dede:productimagelist}{/dede:productimagelist} 2.{dede:field name='imgurls'}{/dede:field} 这两个图集标签 ...