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. deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记

    1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...

  2. [bzoj1783] [Usaco2010 Jan]Taking Turns

    题意: 一排数,两个人轮流取数,保证取的位置递增,每个人要使自己取的数的和尽量大,求两个人都在最优策略下取的和各是多少. 注:双方都知道对方也是按照最优策略取的... 傻逼推了半天dp......然后 ...

  3. B. Secret Combination

    B. Secret Combination time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  4. JFinal极速开发框架使用笔记(二) 两个问题,一个发现

    最近给新人出了一个小测试,我也用JFinal框架做了一下,记录一下使用过程中遇到的坑和新学到的知识点 首先是遇到的两个小问题, 一个是用最新版的eclipse运行JFinal的maven项目报错,经过 ...

  5. Spring框架学习笔记(3)——配置bean

    1.属性注入 (1)根据setter方法属性注入,这里使用的是property标签.需要bean属性提供对应的setter方法,比如笔记(1)里的 HelloWorld使用的就是这种方法. <! ...

  6. ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

    目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...

  7. Map,List,POJO深拷贝(序列化实现)方法与注意事项

    转载请注明出处,谢谢! 方法1: /*jdk >= 1.5*/ @SuppressWarnings("unchecked") public static <T> ...

  8. vue 路由部署服务器子目录问题

    http://blog.csdn.net/hero82748274/article/details/73436497 <Egret 引擎入门> 这两天一直在查询vue经过打包后部署服务器一 ...

  9. 月薪20k以上的高级程序员需要学习哪些技术呢?

    课程内容: 源码分析.分布式架构.微服务架构.性能优化.团队协作效率.双十一项目实战 适用对象: 1-5年或更长软件开发经验,没有工作经验但基础非常扎实,对java工作机制,常用设计思想,常用java ...

  10. 把要写的内容做个list,半年过去了

    先说点题外话,来国家气象局的第三周,今天出去和丁书记吃了个饭,基本在聊大学时候的人和事,好像都没怎么变,只是不联系的人愈发不会再联系. 抛开学校的课程不谈,半年做了三件事:CUMT校园导航 / Ope ...