datax因为脏数据降速问题解决
一言以蔽之:datax可能会因为脏数据太多导致频繁回滚操作,进一步让jvm内存触发gc,让速度降低到0,可以在sql语句中规避脏数据的写入来规避
1.问题
datax使用类型转换触发jvm gc然后降速至0失去响应。
->脏数据为什么会触发gc
->脏数据导致datax回滚写入降速
a.首先是开始就低速,发生在动态基线策略里面
b.到八十万条左右的时候就开始低速,发生在动态基线和状态评价里面,这时日志伴随脏数据记录输出。
c.id会从2049开始,是否有一个2048的块大小进行抽取,然后过一段时间才会变回1
d.出现问题在后面,也就是metaspace快满的时候,是否是jvm或者mysql内存不够用,导致sql语句的执行出现问题,但是为什么这样的问题前面没出现,后面才出现。为什么后面会出现这种问题,是sql先失效导致的脏数据,再导致jvm,还是jvmgc导致sql失效产生脏数据。
可能原因:
1.数据问题
2.jvm内存不够用
应该是这个原因,不确定是jvm的问题还是mysql的问题,如果是不转换数据格式,那么很快就能完成也没有jvm info信息的生成:
metaspace占用达到了97%,速度就降下来了,compress class space也到了90,触发了gc
2020-11-27 10:02:22.070 [job-0] INFO VMInfo - [delta cpu info] => curDeltaCpu | averageCpu | maxDeltaCpu | minDeltaCpu -1.00% | -1.00% | -1.00% | -1.00%[delta memory info] => NAME | used_size | used_percent | max_used_size | max_percent PS Eden Space | 239.66MB | 75.96% | 239.66MB | 75.96% Code Cache | 10.74MB | 90.48% | 10.74MB | 90.48% Compressed Class Space | 1.93MB | 90.98% | 1.93MB | 90.98% PS Survivor Space | 2.53MB | 19.47% | 2.53MB | 19.47% PS Old Gen | 5.81MB | 0.85% | 5.81MB | 0.85% Metaspace | 18.64MB | 97.48% | 18.64MB | 97.48% [delta gc info] => NAME | curDeltaGCCount | totalGCCount | maxDeltaGCCount | minDeltaGCCount | curDeltaGCTime | totalGCTime | maxDeltaGCTime | minDeltaGCTime PS MarkSweep | 0 | 0 | 0 | 0 | 0.000s | 0.000s | 0.000s | 0.000s PS Scavenge | 0 | 16 | 16 | 0 | 0.000s | 0.194s | 0.194s | 0.000s
初始值:
MEMORY_NAME | allocation_size | init_size PS Eden Space | 256.00MB | 256.00MB Code Cache | 240.00MB | 2.44MB Compressed Class Space | 1,024.00MB | 0.00MB PS Survivor Space | 42.50MB | 42.50MB PS Old Gen | 683.00MB | 683.00MB Metaspace | -0.00MB | 0.00MB
3.为什么70万左右出现脏数据 ,前面都没出现。
拟解决方案:
1.调高jvm内存,调高maxerror值或者设置maxerror值为百分比。
2.检查日志确定数据是否有问题。
3.确定脏数据的处理方式
解决过程记录:
1.jvm部分
首先排查jvm部分的问题,这里查看
2.使用较少数据量来测试,是否发生降速,我把一周的数据抽取计划换成了一天,发现了一个问题。就是当脏数据很多,datax会停下来。
是否是脏数据的问题,脏数据太多,我们封装的datax没有对相关状态的反馈。
可以在core.json看到我设置了1000个脏数据,实际上,报错十几个二十几个脏数据的时候有可能会触发jvm的gc,然后就没了。
会不会是这个collector类太大了,然后又不能释放,导致失败 如果不转换类型,那么就不会有这样的脏数据收集,所以会成功。:
jvm的gc
(实际上应该是脏数据导致回滚,回滚类占用太大)
脏数据拟解决方案:
1.一方面是脏数据的发现与处理,可以配置直接丢弃?
由于这是往数据库写入的时候出现的问题。也就是说回滚会影响速度,是在数据库写入才发现的脏数据,所以是否直接丢弃这些脏数据并不能解决降速的问题,降速问题更多的可能是因为数据库因为回滚收到了影响,能够恢复。还可能因为这些回滚操作需要更多的内存空间让datax执行,而内存空间不够,导致了gc进一步降低了datax抽取的速度。
可能方法:
错误收集没有停止,但是依然降速,而且伴着gc的出现。
2.确定脏数据的产生方式:
考虑到如果不转换字段类型,那么是可以直接抽取不出问题的。那么这里我们尝试先不转换抽取到一张表中,然后根据转换抽取策略里面的脏数据信息去查看,是否存在脏数据,存在什么类型的脏数据,在sql语句中对这些脏数据进行规避。
可以看到不转换的value字段里面有字符串,那么怎么在sql语句里面避免这些字符串抽取出来:
可以用when value REGEXP’[^0-9.]’=0 then value 判定是否为数值
SELECT parent_type, child_type, province, CASE WHEN NAME LIKE “磁盘使用率%” THEN “磁盘使用率” WHEN NAME LIKE “磁盘使用量-C” THEN “磁盘使用量” WHEN NAME LIKE “%磁盘io%” THEN “磁盘io” ELSE NAME END AS NAME, be_monitored_ip, unit, CASE WHEN VALUE REGEXP ‘[^0-9.]’ = 0 THEN VALUE WHEN VALUE LIKE “正常” THEN “0” ELSE “1” END AS VALUE , create_time FROM data_c WHERE value
!= ‘’ AND ( BINARY NAME LIKE “cpu使用率” OR BINARY NAME LIKE “cpu频率” OR BINARY NAME LIKE “cpu温度” OR BINARY NAME LIKE “磁盘使用率-C” OR BINARY NAME LIKE “磁盘使用量-C” OR BINARY NAME LIKE “%磁盘io%” OR BINARY NAME LIKE “磁盘大小” OR BINARY NAME LIKE “内存大小” OR BINARY NAME LIKE “内存使用率” OR BINARY child_type = “中间件” ) AND create_day LIKE “2020111%” LIMIT 100
SELECTparent_type,child_type,province,
CASEWHEN NAME LIKE "磁盘使用率%" THEN"磁盘使用率" WHEN NAME LIKE "磁盘使用量-C" THEN"磁盘使用量" WHEN NAME LIKE "%磁盘io%" THEN"磁盘io" ELSE NAME END AS NAME,be_monitored_ip,unit,
CASEWHEN VALUEREGEXP '[^0-9.]' = 0 THENVALUEWHEN VALUELIKE "正常" THEN"0" ELSE "1" END AS VALUE,create_time FROMdata_cloud_monitor WHERE`value` != '' AND (BINARY NAME LIKE "cpu使用率" OR BINARY NAME LIKE "cpu频率" OR BINARY NAME LIKE "cpu温度" OR BINARY NAME LIKE "磁盘使用率-C" OR BINARY NAME LIKE "磁盘使用量-C" OR BINARY NAME LIKE "%磁盘io%" OR BINARY NAME LIKE "磁盘大小" OR BINARY NAME LIKE "内存大小" OR BINARY NAME LIKE "内存使用率" OR BINARY child_type = "中间件" ) AND create_day LIKE "2020111%" LIMIT 100
这里遇到了新的问题,sql语句使用到了[],我这里封装datax的json文件生成放到tomcat的web应用报错,这并不是每个人都会遇到的。
错误原因:
当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。
例如:http://localhost:8080/index.do?{id:123}
解决方法:
1、去除URL中的特殊字符;
3、使用 Post 方法提交数据
4、更换低版本的Tomcat来规避这种问题。
5、在 conf/catalina.properties 添加或者修改:
5.1 添加 tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
5.2 修改tomcat/conf/catalina.properties的配置文件
Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
具体来说,就是添加了些规则去限制HTTP头的规范性
org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target
if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || i == 62 || i == 92 || i == 94 || i == 96 || i == 123 || i == 124 || i == 125) {
IS_NOT_REQUEST_TARGET[i] = true;
}
转换过来就是以下字符(对应10进制ASCII看):
键盘上那些控制键:(<32或者=127)
非英文字符(>127)
空格(32)
双引号(34)
#(35)
<(60)
>(62)
反斜杠(92)
^(94)
~(96)
{(123)
}(124)
|(125)
更改配置文件,重启服务器后,并没有解决问题。由于我的项目以前是使用tomcat7的所以这里回退到了tomcat7能够正常地完成抽取,这里我就不继续深入了。
3.另一方面是设置jvm
实际上按照逻辑来说,通过避免脏数据的写入才是解决问题的正确思路,降速问题应该就是由于脏数据写入,然后回滚操作使速度降低。脏数据太多让回滚操作的类内存爆了,调高内存感觉不是一个很合理的方法。通过sql解决脏数据在我这里可行。就不继续深入了。
后期计划:
根据需求看看是否有必要在tomcat更高版本寻找解决方案,目前通过降低tomcat版本+避免过多脏数据的写入来解决降速问题。
datax因为脏数据降速问题解决相关推荐
- Verilog训练笔记(2)——数据降速增宽
数据降速增宽 1.要求 (1)对一路8bit信号进行1/2倍降速,并将8bit转换为16bit输出. (2)输出信号有效位在完成一次8bit转16bit时拉高,其余时间拉低 (3)不使用FIFO IP ...
- 光猫桥接后宽带降速问题解决
文章目录 一.背景 二.解决方案 三.升级款改动 四.排查经历 一.背景 光猫桥接使用路由器拨号后宽带降速到原来的一半. 条件: 1.新办的电信宽带 2.光猫桥接,路由器拨号 3.光猫10Gbps接口 ...
- 关于固态硬盘冷数据掉速问题解决方案
20230107 By wdhuag 前言: 我有一个西数蓝盘500G固态,系统盘,一年没开机,这个月开机后发现系统很卡,持续读取假死严重.测试没有坏块,网上说的是冷数据掉速问题. 参考: 如何看待西 ...
- 5G来了4G降速?负载均衡链路聚合器了解一下
本文通过一种全新的简单粗暴易懂的方式(可以在这里断句)带你分析一个电子产品的需求--负载均衡链路聚合器!5G来了,还在用4G网络的你,是否感觉到网速变慢,延迟变长呢?说好的提速降费呢?降费我们感受到了 ...
- 消息称百度网盘青春版降速23倍:从52MB/s降至2.2MB/s
12月19日消息,近日,有消息称,百度网盘青春版(不限速)计划于12月20日开始内测,但有网友发现,百度似乎把之前内测海报中的 52MB / s 改成了 2.2MB / s,降速23倍. 此前,百度方 ...
- “华为搜索”正海外内测;苹果5亿美元和解“降速门”;Firefox隐藏HTTPS | 极客头条...
整理 | 郭芮 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...
- 一周新闻纵览:工信部组织召开综合整治骚扰电话专项行动;智能锁百万指纹泄密;4G不会降速5G网速会更快
不知不觉 又到了周五了 伴随着一周的小尾巴 开始我们今天的一周IT新闻盘点吧 我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系.-杨绛 1 网络黑产无孔不入 随着社会进入数字经济时 ...
- scrapy间歇性响应为空/降速/缓存
使用 scrapy访问豆瓣的搜索接口时,莫名会出现response json数据为空的情况. 加上回调重新请求 (要设置dont_filter=True 防止被过滤), 还是会出现异常. 最后发现是请 ...
- 喜马拉雅一喜一忧:盈利水平好转,营收减档降速,继续上市进程
3月29日,港交所官网显示,在线音频平台喜马拉雅控股-W(下称"喜马拉雅")更新了上市申请材料(招股书).此前的2021年9月13日,喜马拉雅曾首度在港交所递表,此后因超过6个月未 ...
- 极客日报:消息称字节国内收入降速,抖音收入停止增长;小鹏汽车创始人回应品牌名称太土;TypeScript 4.5正式版发布
一分钟速览新闻点! 美团外卖更换新logo 小鹏汽车创始人回应品牌名称太土 浪潮内部通报加班语事件 消息称字节国内收入降速,抖音收入停止增长 网易云音乐推出摸鱼计算器 123456成今年最常用密码 苹 ...
最新文章
- 提升开发效率的一款mybatis开发神器
- Repeater 绑定下拉列表
- linux qos 软件,linux下QOS:应用篇 - 博客 - 伯乐在线
- 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
- pytorch学习入门 (二) Variable(变量)
- python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介
- Qt 程序打包发布总结 转
- C语言中的指针型函数值
- Unity跨iOS、Android平台使用protobuf-net的方法(.Net 2.0)《二》
- [转载]PT建站源码(PT服务器原程序)汇总(20100815更新)
- 档案盒正面标签制作_使用WORD制作档案盒侧面标签方法
- 图片去水印的原理_图片去水印方法 图片如何去掉水印
- bedtools查找基因组位置的信息
- 方维直播源码:修复BUG完整版(附代码)
- 互联网通信流程(含servlet)
- Linux服务器开发,手把手设计实现epoll
- SparkConf 配置的概念和用法
- java字符串长度(java字符串长度压缩)
- 切片器可以设置日期格式?_用Excel切片器为你的数据报告增加交互功能,很简单!...
- 主题建模-corpora语料库-PCA进行降维