【已解决】doris报错: timeout when waiting for send fragments RPC. Wait(sec): 5, host: xxx

Viewed 493

收到报错:
image.png
6月3日截止到10点半, 共执行了近17万条insert into语句, 从监控来看doris fe节点已经挂了

但从服务器top来看, fe还活着, 只是内存占用即将爆满, 修改后的jvm启动参数为:

/u01/doris/java8/bin/java -Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx118g -Xms118g -Xmn40g -XX:MaxTenuringThreshold=15 -XX:CMSInitiatingOccupancyFraction=65 -XX:+UseMembar -XX:SurvivorRatio=8 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:/u01/doris/doris-1.2.7/fe/log/fe.gc.log. -XX:-OmitStackTraceInFastThrow -XX:OnOutOfMemoryError=kill -9 %p org.apache.doris.PaloFe

image.png

该时间点对应host的be warn日志如下:
image.png

问题1: wait里面这个默认的5是怎么来的? 对应哪个配置项?
问题2: 这个到底问题是在fe还是be上? 看be负载其实不高, 反而fe接近满载
问题3: 除了替换insert into为stream load以外, 还能如何解决这个问题?

1 Answers
  1. 这个配置是 remote_fragment_exec_timeout_ms ,修改完后重启
  2. FE 的负载比较高,每次insert 都要经过FE节点
  3. 低版本只能改为streamload,同时streamload也是Doris中最推荐的导入方式,是直接将数据通过哦http导入到BE节点的。如果升级到2.1版本的话,可以使用group commit。把大量的jdbc inert 放到一个事物中提交,不需要每次提交一个单独的事物。

总结:

  1. 建议升级到2.0+ 版本,这回 RPC 的问题基本在2.0+ 版本上很少遇到了,针对性的fix过。
  2. 不建议走jdbc insert,走streamload是最佳的导入方式。