java优化上传速度慢怎么办_我是如何让minio client上传速度提高几十倍的
minio java client 使用okhttp作为底层的http实现,在产品包里面局域网上传文件的速度一直只有400~800KB/s,经过一天排查发现是-Djava.compile=none禁用了即时编译导致。
发现问题的场景
minio-java的使用架构图是这样的:
[Minio Server]
and
[Minio Server]
行云管家发布的第一个私有云版本(即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的默认配置?
java优化上传速度慢怎么办_我是如何让minio client上传速度提高几十倍的相关推荐
- axios传数组到后台_我是如何让公司后台管理系统焕然一新的
作者:yeyan1996 https://juejin.im/post/5c76843af265da2ddd4a6dd0 写在前面 马上到了金三银四的时间,很多公司开启了今年第一轮招聘的热潮,虽说今年 ...
- 安卓 获取指定类型的文件_太良心了!传文件这件小事,这款免费APP比微信QQ好用十倍!...
不知道大家在遇到手机与手机.手机与电脑之间互传文件的时候,是借助的什么工具? 是通过微信QQ这些社交软件,还是直接上数据线? 这些方法都不是特别方便:微信限制文件大小和类型,用数据线需要频繁插拔. 那 ...
- 工程之道 | CPU推理性能提高数十倍,MegEngine计算图、MatMul优化解析
本文转载自旷视研究院. 背景及引言 在深度学习大规模落地边缘端场景的今天,如何最大程度降本增效,是企业与开发者共同关注的话题.其中,模型的训练与推理是两个关键环节. 天元(MegEngine)深度学习 ...
- mysql数据库上传ftp服务器中_备份部分mysql表并上传至指定ftp服务器目录中
防伪码:忘情公子著 前几天领导安排了一个任务,让写一个脚本备份某mysql数据库中的部分表,并要将备份好的文件上传至某ftp服务器中,于是就有了以下的脚本 #!/bin/bash #Filename: ...
- vue上传excel并展示_(一)vue导入上传excel功能
1.excel上传功能 ref="upload" :show-upload-list="false" :default-file-list="defa ...
- abap 添加alv上的工具栏的按钮_神器必会!“世界上最好的编辑器Source Insight”...
前言"Source Insight(以下简称SI)是世界上最好的编辑器",说这句话不知道会不会出门被打呢?-_- 中国古话说得好,"文无第一,武无第二",所以不 ...
- 请求列出指定服务器上的可用功能失败_滥用 ESI 详解(上)
在进行安全性评估时,我们注意到了标记语言 Edge Side Includes (ESI)中的一个意外行为,这种语言用于许多流行的 HTTP 代理(反向代理.负载平衡器.缓存服务器.代理服务器).我们 ...
- [转载]环游澳大利亚18天——前传与攻略_我是亲民_新浪博客
期待中,学习中... 原文地址:环游澳大利亚18天--前传与攻略作者:老湖 我一直以为自助旅行首先要走遍中国最美的地方,趁着年轻,徒步旅行中国最艰苦的美丽之地,老了之后,再去国外旅行,国外旅行先去比较 ...
- 电源上的sense什么意思_冷知识:电源开关上的这两个标识有什么含义?
几乎所有的电器.灯具和插座上 只要带有电源开关 必然会出现"|"和"O"两个符号 如果只看符号判断"|"和"O"到底代表 ...
最新文章
- winform datagridview 合并单元格
- opencv 通过颜色提取显示屏数字
- vue2.0 prop的使用
- 一篇文章带你快速入门JavaScript(自学者福利)
- C#针对js escape解码
- 【51NOD-0】1011 最大公约数GCD
- Bailian2973 Skew数【进制】
- python中int什么意思_python中int是什么意思
- ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
- python制作ppt动画_卧槽,还能这么玩!用Python生成动态PPT
- 钉钉和mis系统对接调研
- 伯努利-欧拉装错信封问题
- sparksql-分组月度环比同比自动化
- MongoDB 数据文件损坏修复救命repair与致命危险
- 2005年9月10日。
- 2019最新Java实战开发今日头条资讯网站
- 如何在官网上下载Java JDK的历史版本
- 各种品牌类型的主板 电脑开机启动选项快捷键
- 苹果电脑上几个不错的数学分析工具
- 详译:RESIDUAL AND PLAIN CONVOLUTIONAL NEURAL NETWORKS FOR 3D BRAIN MRICLASSIFICATION