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上传速度提高几十倍的相关推荐

  1. axios传数组到后台_我是如何让公司后台管理系统焕然一新的

    作者:yeyan1996 https://juejin.im/post/5c76843af265da2ddd4a6dd0 写在前面 马上到了金三银四的时间,很多公司开启了今年第一轮招聘的热潮,虽说今年 ...

  2. 安卓 获取指定类型的文件_太良心了!传文件这件小事,这款免费APP比微信QQ好用十倍!...

    不知道大家在遇到手机与手机.手机与电脑之间互传文件的时候,是借助的什么工具? 是通过微信QQ这些社交软件,还是直接上数据线? 这些方法都不是特别方便:微信限制文件大小和类型,用数据线需要频繁插拔. 那 ...

  3. 工程之道 | CPU推理性能提高数十倍,MegEngine计算图、MatMul优化解析

    本文转载自旷视研究院. 背景及引言 在深度学习大规模落地边缘端场景的今天,如何最大程度降本增效,是企业与开发者共同关注的话题.其中,模型的训练与推理是两个关键环节. 天元(MegEngine)深度学习 ...

  4. mysql数据库上传ftp服务器中_备份部分mysql表并上传至指定ftp服务器目录中

    防伪码:忘情公子著 前几天领导安排了一个任务,让写一个脚本备份某mysql数据库中的部分表,并要将备份好的文件上传至某ftp服务器中,于是就有了以下的脚本 #!/bin/bash #Filename: ...

  5. vue上传excel并展示_(一)vue导入上传excel功能

    1.excel上传功能 ref="upload" :show-upload-list="false" :default-file-list="defa ...

  6. abap 添加alv上的工具栏的按钮_神器必会!“世界上最好的编辑器Source Insight”...

    前言"Source Insight(以下简称SI)是世界上最好的编辑器",说这句话不知道会不会出门被打呢?-_- 中国古话说得好,"文无第一,武无第二",所以不 ...

  7. 请求列出指定服务器上的可用功能失败_滥用 ESI 详解(上)

    在进行安全性评估时,我们注意到了标记语言 Edge Side Includes (ESI)中的一个意外行为,这种语言用于许多流行的 HTTP 代理(反向代理.负载平衡器.缓存服务器.代理服务器).我们 ...

  8. [转载]环游澳大利亚18天——前传与攻略_我是亲民_新浪博客

    期待中,学习中... 原文地址:环游澳大利亚18天--前传与攻略作者:老湖 我一直以为自助旅行首先要走遍中国最美的地方,趁着年轻,徒步旅行中国最艰苦的美丽之地,老了之后,再去国外旅行,国外旅行先去比较 ...

  9. 电源上的sense什么意思_冷知识:电源开关上的这两个标识有什么含义?

    几乎所有的电器.灯具和插座上 只要带有电源开关 必然会出现"|"和"O"两个符号 如果只看符号判断"|"和"O"到底代表 ...

最新文章

  1. winform datagridview 合并单元格
  2. opencv 通过颜色提取显示屏数字
  3. vue2.0 prop的使用
  4. 一篇文章带你快速入门JavaScript(自学者福利)
  5. C#针对js escape解码
  6. 【51NOD-0】1011 最大公约数GCD
  7. Bailian2973 Skew数【进制】
  8. python中int什么意思_python中int是什么意思
  9. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
  10. python制作ppt动画_卧槽,还能这么玩!用Python生成动态PPT
  11. 钉钉和mis系统对接调研
  12. 伯努利-欧拉装错信封问题
  13. sparksql-分组月度环比同比自动化
  14. MongoDB 数据文件损坏修复救命repair与致命危险
  15. 2005年9月10日。
  16. 2019最新Java实战开发今日头条资讯网站
  17. 如何在官网上下载Java JDK的历史版本
  18. 各种品牌类型的主板 电脑开机启动选项快捷键
  19. 苹果电脑上几个不错的数学分析工具
  20. 详译:RESIDUAL AND PLAIN CONVOLUTIONAL NEURAL NETWORKS FOR 3D BRAIN MRICLASSIFICATION

热门文章

  1. 对话 CTO | 听快看漫画 CTO 李润超讲重塑漫画产业的技术推动力
  2. MATLAB矩阵求值
  3. void相关注意事项
  4. 转载:强化学习中Bellman最优性方程背后的数学原理?
  5. 【C++程序设计】2.1 浮点型数据有效位数的讨论
  6. 3 Python获取股票、基金、期货数据,好用的库efinance
  7. 股票和期货有什么区别(期货投机与股票投机的区别)
  8. 铁死亡中的铁代谢 | Nature Reviews Nephrology 2023
  9. 如何做好生产物料管理
  10. centos 日志审计_CentOS7 - 审计日志