Thrift Direct Memory OOM问题解决方法
2019独角兽企业重金招聘Python工程师标准>>>
FrameBuffer为AbstractNonblockingServer类的内部类,TThreadedSelectorServer继承了AbstractNonblockingServer:
通过研究代码,发现FrameBuffer的read方法的代码中有如下片段,
// pull out the frame size as an integer.int frameSize = buffer_.getInt(0);if (frameSize <= 0) {LOGGER.error("Read an invalid frame size of " + frameSize+ ". Are you using TFramedTransport on the client side?");return false;}// if this frame will always be too large for this server, log the// error and close the connection.if (frameSize > MAX_READ_BUFFER_BYTES) {LOGGER.error("Read a frame size of " + frameSize+ ", which is bigger than the maximum allowable buffer size for ALL connections.");return false;}
MAX_READ_BUFFER_BYTES这个值即为对读取的包的长度限制,为AbstractNonblockingServer类的属性,其值又取自内部类AbstractNonblockingServerArgs的maxReadBufferBytes属性,默认值为long型的最大值;
即只要修改maxReadBufferBytes的值就可以起到限制的作用,修改服务启动的代码如下:
TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args(transport).processor(processor).workerThreads(this.serverWorkerThreads);// The maximum amount of memory we will allocate to client IO buffers at a time.// set 1MB.args.maxReadBufferBytes = 1024 * 1024L;server = new TThreadedSelectorServer(args);server.setServerEventHandler(new DataIfaceServerEvent());LOG.info("DataIfaceServer start, port={}.", this.serverPort);server.serve();
args.maxReadBufferBytes = 1024 * 1024L; --设置为1M
通过对我的thrift的服务进行抓包调研,我的方法调用请求数据包没有超过200字节的,所以1M的长度限制是足够了。
通过测试如上的修改没有问题,并且对服务继续发送http get请求不会导致直接内存增加。并且报出错误日志:
Read a frame size of XXX, which is bigger than the maximum allowable buffer size for ALL connections.
至此问题解决;
问题的分析过程:http://my.oschina.net/shipley/blog/422204
转载于:https://my.oschina.net/shipley/blog/467670
Thrift Direct Memory OOM问题解决方法相关推荐
- Thrift Direct Memory OOM问题解决方法 内存溢出问题
Thrift Direct Memory OOM问题解决方法 内存溢出问题 参考文章: (1)Thrift Direct Memory OOM问题解决方法 内存溢出问题 (2)https://www. ...
- pytorch出现RuntimeError: CUDA out of memory的问题解决方法
pytorch出现RuntimeError: CUDA out of memory解决方法 将batch-size设置小些试试,如果不行,继续第二步 多线程num_works设置较小,最差设为0
- Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法
转: Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法 ORA-00001: 违反唯一约束条件 ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 O ...
- 直接内存访问 (Direct Memory Access, DMA)
Table of Contents 直接内存访问 (Direct Memory Access, DMA) DMA 模型 设备 DMA 的类型 总线主控器 DMA 第三方 DMA 第一方 DMA 主机平 ...
- go get无法下载(unrecognized import path)的问题解决方法
go get无法下载(unrecognized import path)的问题解决方法 在使用go get -u github.com/axw/gocov/-时出现如下问题 go get: upgra ...
- Android加载图片内存溢出问题解决方法
这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...
- Fortify SCA快速入门以及常见问题解决方法
本篇将透过HP_Fortify_SCA_and_Apps_3.80从实用主义的角度入手,使读者能够快速的对该工具进行使用和对一些可能出现的常见问题进行处理,从而完成一个完整流程的源代码安全性静态扫描测 ...
- DAM(Direct Memory Access)
cpu 和 IO 之间的协作关系 占用-->中断-->异步(IOP专门做IO操作) 以往的io操作都需要经过cpu之手,在以前,cpu要一直轮询io系统,io操作是否已经结束,在这期间,c ...
- oracle ecology已崩溃,ECOLOGY问题解决方法培训.ppt
ECOLOGY系统问题解决方法培训,泛微:顾伟民 2009年08月,培训内容,常见问题及解决方法 安装问题 数据库问题 IE问题 性能调优 问题的诊断 提交问题注意事项 解疑,常见问题及解决方法 安装 ...
最新文章
- java lambda 变量_为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?...
- 网站文章中如何设置关键词才更有利于SEO优化?
- 百度前端学院---斌斌学院---任务demo---1
- 元宇宙iwemeta:元宇宙和虚拟网红入围《经济学人》2022年值得关注的技术
- python获取sessionid_Python Flask:跟踪用户会话?如何获取会话Cookie ID?
- 【CF-gym101889:J】Jumping frog(圆上跳----思维)
- 处理文件的fseek函数
- 解题:CEOI 2017 Mousetrap
- 【C++】数字的组合排列情况
- GPIF II designer使用说明+CYUSB3014芯片基本信息介绍——英文文档学习记录
- 原来动漫中的羞耻表情都是这样出来的,学会以后可以自己慢慢YY了
- win10有一个隐藏的超级管理员帐户,拥有全部权限,如何启用它
- 手把手教你逆向分析 Android 程序 1
- 凤凰跟范跑跑-龌龊的交易
- uniapp设置导航栏、沉浸式导航栏以及获取屏幕尺寸
- ios本地文件读取方法详解
- Oracle P6 Professional专业版 22.12 中的热门新功能
- Linux下无法输入quot;\quot;和quot;|quot;的问题
- 2022年中科大分子生物学考试题、复习资料汇总(往年真题复习资料)
- 计算今天是今年的第几周