一言以蔽之: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因为脏数据降速问题解决相关推荐

  1. Verilog训练笔记(2)——数据降速增宽

    数据降速增宽 1.要求 (1)对一路8bit信号进行1/2倍降速,并将8bit转换为16bit输出. (2)输出信号有效位在完成一次8bit转16bit时拉高,其余时间拉低 (3)不使用FIFO IP ...

  2. 光猫桥接后宽带降速问题解决

    文章目录 一.背景 二.解决方案 三.升级款改动 四.排查经历 一.背景 光猫桥接使用路由器拨号后宽带降速到原来的一半. 条件: 1.新办的电信宽带 2.光猫桥接,路由器拨号 3.光猫10Gbps接口 ...

  3. 关于固态硬盘冷数据掉速问题解决方案

    20230107 By wdhuag 前言: 我有一个西数蓝盘500G固态,系统盘,一年没开机,这个月开机后发现系统很卡,持续读取假死严重.测试没有坏块,网上说的是冷数据掉速问题. 参考: 如何看待西 ...

  4. 5G来了4G降速?负载均衡链路聚合器了解一下

    本文通过一种全新的简单粗暴易懂的方式(可以在这里断句)带你分析一个电子产品的需求--负载均衡链路聚合器!5G来了,还在用4G网络的你,是否感觉到网速变慢,延迟变长呢?说好的提速降费呢?降费我们感受到了 ...

  5. 消息称百度网盘青春版降速23倍:从52MB/s降至2.2MB/s

    12月19日消息,近日,有消息称,百度网盘青春版(不限速)计划于12月20日开始内测,但有网友发现,百度似乎把之前内测海报中的 52MB / s 改成了 2.2MB / s,降速23倍. 此前,百度方 ...

  6. “华为搜索”正海外内测;苹果5亿美元和解“降速门”;Firefox隐藏HTTPS | 极客头条...

    整理 | 郭芮 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...

  7. 一周新闻纵览:工信部组织召开综合整治骚扰电话专项行动;智能锁百万指纹泄密;4G不会降速5G网速会更快

    不知不觉 又到了周五了 伴随着一周的小尾巴 开始我们今天的一周IT新闻盘点吧 我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系.-杨绛 1 网络黑产无孔不入 随着社会进入数字经济时 ...

  8. scrapy间歇性响应为空/降速/缓存

    使用 scrapy访问豆瓣的搜索接口时,莫名会出现response json数据为空的情况. 加上回调重新请求 (要设置dont_filter=True 防止被过滤), 还是会出现异常. 最后发现是请 ...

  9. 喜马拉雅一喜一忧:盈利水平好转,营收减档降速,继续上市进程

    3月29日,港交所官网显示,在线音频平台喜马拉雅控股-W(下称"喜马拉雅")更新了上市申请材料(招股书).此前的2021年9月13日,喜马拉雅曾首度在港交所递表,此后因超过6个月未 ...

  10. 极客日报:消息称字节国内收入降速,抖音收入停止增长;小鹏汽车创始人回应品牌名称太土;TypeScript 4.5正式版发布

    一分钟速览新闻点! 美团外卖更换新logo 小鹏汽车创始人回应品牌名称太土 浪潮内部通报加班语事件 消息称字节国内收入降速,抖音收入停止增长 网易云音乐推出摸鱼计算器 123456成今年最常用密码 苹 ...

最新文章

  1. 提升开发效率的一款mybatis开发神器
  2. Repeater 绑定下拉列表
  3. linux qos 软件,linux下QOS:应用篇 - 博客 - 伯乐在线
  4. 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
  5. pytorch学习入门 (二) Variable(变量)
  6. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介
  7. Qt 程序打包发布总结 转
  8. C语言中的指针型函数值
  9. Unity跨iOS、Android平台使用protobuf-net的方法(.Net 2.0)《二》
  10. [转载]PT建站源码(PT服务器原程序)汇总(20100815更新)
  11. 档案盒正面标签制作_使用WORD制作档案盒侧面标签方法
  12. 图片去水印的原理_图片去水印方法 图片如何去掉水印
  13. bedtools查找基因组位置的信息
  14. 方维直播源码:修复BUG完整版(附代码)
  15. 互联网通信流程(含servlet)
  16. Linux服务器开发,手把手设计实现epoll
  17. SparkConf 配置的概念和用法
  18. java字符串长度(java字符串长度压缩)
  19. 切片器可以设置日期格式?_用Excel切片器为你的数据报告增加交互功能,很简单!...
  20. 主题建模-corpora语料库-PCA进行降维

热门文章

  1. 我的Android进阶之旅------Android中编解码学习笔记
  2. 云服务器运维管理面板有哪些?
  3. 推荐可永久保存文件的免费网络硬盘
  4. DFT(design for test)
  5. PyTest 生成多种格式的 测试报告 report
  6. android ConstraintLayout布局 详解
  7. 手机计算机软件删除了怎么恢复,手机卸载的软件怎么恢复?手机卸载的软件恢复方法介绍...
  8. 分享32个高质量的自学网站
  9. php 死链查询,seo网站死链解决方法 死链查询检测工具
  10. 《自己动手写网络爬虫》笔记3-宽度优先遍历互联网