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

问题分析过程
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. PowerScript数据类型及变量

    PowerBuilder的标准数据类型共有14种 数据类型 意    义 示    例 Blob 二进制数据 可存放可变长度的大量数据,如图片,其它类型的文档数据. 如保存位图 Boolean 布尔型 ...

  2. python note 13 内置函数

    1. lst = ["白蛇传","骷髅叹","庄周闲游"] it = lst.__iter__() print(it.__next__()) ...

  3. systemd 编写服务管理脚本---学习

    转载:https://www.cnblogs.com/sparkdev/p/8521812.html 我们运行 linux 服务器的主要目的是通过运行程序提供服务,比如 mysql.web serve ...

  4. 4-20arget 属性和hover

    1.target 属性 定义和用法 target 属性规定在何处打开 action URL. 值 描述 _blank 在新窗口中打开. _self 默认.在相同的框架中打开. _parent 在父框架 ...

  5. zabbix添加nginx监控

    nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等,可以利用这个功能编写zabbix监控 ...

  6. VS code 代码格式整理的配置

    { "workbench.iconTheme": "material-icon-theme", "vetur.validation.template& ...

  7. SQL Server 异常解决:语句被终止。完成执行语句前已用完最大递归 100。

    问题出现业务场景: 我司有个缺料分析报表,有一个字段是适用机种,需要通过BOM递归读取顶层父物料.这个错就是缺料分析报表执行时报的错: 原因分析定位: 通过网上一些资料,猜测应该是某个递归查询语句,遇 ...

  8. 把多个字符串里面的项写到不同的对象中,然后在push到一个数组中

    otherUserNames: "甲,乙,丙,丁"otherUserIds: "10008750,10008711,10003348,10008747" oth ...

  9. 使用JFlex生成词法分析器 1:安装配置

    环境:Windows 10 STEP 1: 下载 JFlex 文件,我选择的是 jflex-1.7.0.zip.下载完成后解压到想安装的位置. 文件结构如下(假设解压目录为 C:\): C:\jfle ...

  10. [转] spring framework体系结构及内部各模块jar之间的maven依赖关系

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...