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

问题分析过程
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. Unity Awards 2018最佳资源

    好的工具与资源,将帮助你的开发,达到事办功倍,今天我们将为大家介绍荣获Unity Awards 2018最佳资源的获奖作品. 最佳艺术工具:Aura - Volumetric Lighting Aur ...

  2. 记录-eureka

    我的工程目录是这样的: eureka- server:服务端 EurekaServerApplication的内容: 服务端配置文件内容: eureka-server :服务端 pom 文件: < ...

  3. centos7 安装部署zabbix

    由于zabbix提供集中的web监控管理界面,因此服务在web界面的呈现需要LAMP架构支持. php 连接mysql服务,因为7版本mysql要收费,所以我们安装mariadb, 一.安装LAMP环 ...

  4. IDEA中,将项目加入maven管理。

    在项目上右键->Add Framework Support Choose Maven 生成pom.xml 在<project>下配置国内仓库 <properties>&l ...

  5. MyEclipse 编译错误 web项目中的 js,jsp报错 更改

    搜索   validation   语法检测 必须 选定一个  不然不编译

  6. linux下修改时间戳

    Linux下touch是一个非常有用的命令. touch语法结构如下: touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间&g ...

  7. Python 判断文件是否存在

    参考:https://www.cnblogs.com/jhao/p/7243043.html

  8. Laravel API Tutorial: How to Build and Test a RESTful API

    With the rise of mobile development and JavaScript frameworks, using a RESTful API is the best optio ...

  9. oo第八次作业

    oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...

  10. LNMP php缓存器下载

    一.LNMP php缓存器下载(1)配置环境变量 LC_ALLecho ‘export LC_ALL=C'>> /etc/profilesource /etc/profile 生效命令 ( ...