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

问题分析过程
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. Java中代理

    普通代理(最简单的代理) 需要有两个实现同一个接口的类,一个是被代理的类,一个是代理类 被代理类中我们按照自己想实现的功能重写接口中的方法 代理类中因为需要代理被代理类,所以在代理类中需要有个被代理类 ...

  2. 贪吃蛇(简易版)Leslie5205912著

    # include <stdio.h># include <string.h># include <windows.h># include <stdlib.h ...

  3. webpack简笔(1)

    1.npm init -> 生成package.json文件 2.npm install webpack --save-dev (不建议全局安装 ,会锁定版本) [ --save-dev 开发环 ...

  4. java集合类,HashMap,ArrayList

    集合类 Collection LinkedList.ArrayList.HashSet是非线程安全的, Vector是线程安全的; ArrayXxx:底层数据结构是数组,连续存放,所以查询快,增删慢. ...

  5. 关于TCP窗口大小

    窗口字段 TCP Window字段用于接收端通知发送端:接收端当前能够接收的字节数(即当前允许发送端发送的字节数).在TCP Header中占有16bit长度,如下所示 0 1 2 3 0 1 2 3 ...

  6. Swoole 心跳检测

    Swoole的心跳检测特别简单,只需要配置 heartbeat_check_interval,heartbeat_idle_time就可以了. heartbeat_check_interval:表示服 ...

  7. Spring Cloud的小改进(五)

    1.在Eureka中不能看到具体服务的实例信息: 问题点:服务注册到 Eureka 之后,可以看到在 “Status” 显示的服务信息不明确(不知道具体的服务名等信息),如下图所示: 解决方法: 在服 ...

  8. loadrunner11 下载路径+安装+破解+汉化

    下载地址:http://pan.baidu.com/s/1eQs1Ynw 1.解压安装包 2.运行“setup.exe”,点击“LoadRunner完整安装程序”开始安装,另外此安装包有许多附带组件, ...

  9. abp 设置默认语言为中文

    abp 设置默认语言为中文 abp的默认语言设置,存放于数据库表AbpSettings中,这样配置可使默认语言为中文: name: Abp.Localization.DefaultLanguageNa ...

  10. Netsharp系列文章目录结构

    作者:秋时  转载须说明出处  Netsharp交流群:338963050(请有详细的请求说明) ->. 总体介绍 Netsharp总体介绍 一. Netsharp快速入门系列 Netsharp ...