问题现象
有客户反馈我们的产品有时反应很慢,处理会出现超时。

问题分析过程
1.第一反应可能是用户增加,并发量太大了,询问了运营,最近用户注册数据并没有猛增。

2.分析access日志,发现有隔一段时间会出现几个连续的请求响应时长超过30秒,并且这些请求都是使用一个thrift服务的,而连redis和其他thrift服务的请求没有出现延迟的情况,问题出现在该thrift服务。
分析1)分析该thrift服务的日志,发现接口出现超时的这段时间,该thrift没有打印日志,也就是没有处理请求。这时怀疑是什么资源用完了,首先想到的是数据库连接池,该服务是 多数据源的,并且每个数据库连接池配置的都比较大,不可能出现连接池使用完的情况;也不可能出现一个数据库的连接用完,影响其他数据库连接。

分析2)thrift客户端配置的连接池使用完了?也不可能,前2天生产环境也把客户端连接池配的比较大,按现在的用户数来说够用了。

分析3)自己写工具抽取了access日志中耗时超过20秒的所有请求,发现请求耗时多的请求都是成堆连续出现,并且第一个请求都是请求报表接口,查看thrift服务这些报表接口有些用户数据很大,有的sql要30多秒。得出的结论是报表接口查询阻塞了其它thrift接口,那原因又是什么呢?跟技术总监聊了这个问题,他让我们看一下thrift服务端处理请求的线程数。

分析4)查看thrift服务端处理的代码,org.apache.thrift.server.TThreadedSelectorServer.Args中默认配置的处理请求线程数是5,如果上面说的报表接口连续请求5次,就会出现报表请求阻塞其他请求的现象。在开发环境模拟重现了该问题。
/** The number of threads for selecting on already-accepted connections */
public int selectorThreads = 2;
/**
* The size of the executor service (if none is specified) that will handle
* invocations. This may be set to 0, in which case invocations will be
* handled directly on the selector threads (as is in TNonblockingServer)
*/
private int workerThreads = 5;

解决方案
1.调整框架,把工作线程抽取出来作为可配置参数,生产环境按需调整该参数。
2.把请求耗时的接口抽成一个单独的thrift服务,即使报表sql耗时,请求超时也不影响其他业务接口。

记一次生产环境thrift服务的配置问题的更多相关文章

  1. 记一次生产环境axis2服务特别慢的问题。

    情况如下: 某服务,在测试环境测试的时候整个响应过程也就0.5s左右,测试环境和生产环境axis2版本一致,tomcat版本一致,但是生产环境需要差不多20S. 后来,越来越慢,导致服务一起来,整个生 ...

  2. 如何将生产环境的服务Docker镜像拉取到本地进行调试

    背景 很多时候我们在将开发环境的代码推送到GitLab上面以后,我们在测试的时候发现了问题后无法通过现有的日志输出级别来定位问题,比如我们需要看EFCore生成的SQL语句,在生产环境我们是不可能输出 ...

  3. 记一次生产环境tomcat线程数打满情况分析

    前言 旨在分享工作中遇到的各种问题及解决思路与方案,与大家一起学习. -- 学无止境, 加油 ! Just do it ! 问题描述 运行环境描述 tomcat-8.5 单节点(该应用集群20个节点) ...

  4. [BI项目记]-搭建代码管理环境之服务端

    上一篇介绍如何搭建环境进行文档版本的管理,这篇主要介绍搭建环境进行代码版本的管理. 即使是BI项目也要进行代码版本管理.代码版本管理的工具有很多,VSS, SVN等都是当下大家经常提起的,这里主要介绍 ...

  5. 记一次生产环境Nginx日志骤增的问题排查过程

    摘要:众所周知,Nginx是目前最流行的Web Server之一,也广泛应用于负载均衡.反向代理等服务,但使用过程中可能因为对Nginx工作原理.变量含义理解错误,或是参数配置不当导致Nginx工作异 ...

  6. 记一次生产环境presto删表失败的问题

    场景,开发用java程序连接presto创建一个表,这个表在hdfs的权限为: 然后用presto去删除这个表 报错,没有权限删除,查看上一级目录权限,发现权限正常 直连hive删表 发现正常. 然后 ...

  7. 记一次生产环境nginx图片上传不了的问题

    在server节点目录下配置: client_max_body_size 8M; client_body_buffer_size 8M; 不过还是不能上传就执行下面这条命令: cd /var/lib/ ...

  8. springboot解决开发环境和生产环境不一样的配置问题

    代码: application-dev.yml server: port: gril: cupSize: B age: application-prod.yml server: port: gril: ...

  9. S初始化生产环境数据

    一.将开发机的库文件导出10.10.1.139开发机服务器,桌面上的BAT文件,将数据库表结构和表数据导出来,导到E:\Repository,设置SADMIN密码永不过期BAT文件内容如下: ::导出 ...

随机推荐

  1. 统一集中管理系统cronsun简介,替代crontab

    一.背景 crontab 是 Linux 系统里面最简单易用的定时任务管理工具,相信绝大多数开发和运维都用到过.在咱们公司,很多业务系统的定时任务都是通过 crontab 来定义的,时间长了后会发现存 ...

  2. The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored(E F G H I)

    http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=392 E:Sequence in the Pocket 思路:从 ...

  3. 如何给php数组添加元素

    以参考下 本文较为详细的总结了php数组添加元素方法.分享给大家供大家参考.具体分析如下: 如果我们是一维数组增加数组元素我们可以使用ArrayListay_push,当然除这种方法之外我们还有更直接 ...

  4. vue小结

    一:MVVM模型的理解 Model:数据模型,数据和业务逻辑都在这里定义:View代表视图,负责数据的展示:ViewModel:负责监听model中数据的改变并且控制视图的更新,处理用户交互操作:Mo ...

  5. 监听端口,获取webService请求报文

    第一步下载我们的wsdl文件到本地 第二步建立一个测试webservice工程,把wsdl放在项目里面 第三步把测试webservice中的wsdlLocation改成localhost.....你的 ...

  6. 在Spring Boot中使用WebClient消费RESTful接口

    转载 https://www.zifangsky.cn/1343.html 参考 https://segmentfault.com/a/1190000012916413

  7. mysql关闭groupby模式

    Mysql5.7 出现 SELECT list is not in GROUP BY clause and contains nonaggregated column ‘sss.month_id’ w ...

  8. 更换Appsecrect应该要注意的问题

    1. 有时候因为需要,有些地方需要填写Appsecrect, 但是大家都知道微信公众平台上这个值 即使你自己是管理员是看不到的,只能重置,但是重置后,一定要记住刷新AccessToken啊,不然就尴尬 ...

  9. BZOJ1058或洛谷1110 [ZJOI2007]报表统计

    BZOJ原题链接 洛谷原题链接 STL 本题可以直接使用\(\mathtt{STL\ multiset}\)水过去. 因为本题插入数的操作实际上就是将原数列分为\(n\)段,在每一段的末尾插入数,所以 ...

  10. 第一次面试经历(hr面)

    经过介绍,我有幸去到一家国际背景的广告公司面试前端开发实习生.收到的邮件是复试通知,看来我已经跳过了第一轮面试. 来到hr请我进了一个小间坐下里填求职书,里面有各种个人信息,有兴趣爱好,有工作经历,以 ...