最近遇到一个kafka方面的问题,大致就是由于consumer处理业务超时,导致无法正常提交Offset,进而导致无法消费新消息的问题。下面我想从以下几个方面对此次故障排查进行复盘分析:业务背景、问题描述、排查思路、经验教训。
这次压测的是一个查询用户群组列表信息的接口,该接口里需要查询某个用户的所有群组信息,包括每个群组的名称、成员数量等。 经过之前对业务机器的JVM参数等进行优化后,现在已经不存在业务机器的频繁GC、CPU占用率过高、TPS上不去等问题了。但是我们遇到了两个新问题:在业务接口并发50、TPS600左右时,压测接口出现了超时错误,而且数据库服务器CPU占用率超过了93%!
这周我们对项目里新增的几个接口进行了压力测试,期间遇到了一些之前没有遇到过的坑,走了一些弯路,在这里对这次压力测试经历进行总结复盘,同时也希望能给看到这篇文章的诸位提供一些浅显的思路。〇、经验总结: * 如果在压测过程中,压力始终上不去,可以考虑是施压机器并发上不去,或者被压机器请求处理不过来。 * 施压上不去或者被压机器请求处理不过来,是因为机器CPU瓶颈?内存瓶颈?端口数量瓶颈?逐步排查定位。 * 类似于Grpc这类需要建立rpc连接的请求,可扩展端口的数量会影响并发时连接建立数量。 * 长链路的压测链,在定位问题时可以先从短链开始逐步排查扩展到长链,最终完成整个链路的压力测试。 * 关注压测过程中可能出现的异常现象,哪怕是很不明显的地方,都可能会存在一个BUG。
Apache-Commons-Pool2提供了一套池技术的规范接口和实现的通用逻辑,我们只需要实现其抽象出来的方法就可以了。这篇博文主要分享基于Apache-Commons-Pool2来实现Grpc连接池的应用。
最近新项目上线,需要对项目中的一个HTTP接口进行压力测试,以保证接口性能稳定性。该接口涉及到的主要业务是接收HTTP请求,获取请求中的xml报文参数,并将xml报文解析后存入MySQL数据库。经验总结: 如果总的CPU占用率偏高,且基本都被业务线程占用时,CPU占用率过高的原因跟JVM参数大小没有直接关系,而跟具体的业务逻辑有关。 当设置JVM堆内存偏小时,GC频繁会导致业务线程停顿增多,TPS下降,最后CPU占用率也低了; 当设置JVM堆内存偏大时,GC次数下降,TPS上升,CPU占用率立刻上升。 Dom4J 这个xml解析工具性能很强大,但在处理节点和层级都较多的xml文本时,整体解析效率依然会成为业务处理瓶颈。
gprc是google开源的一套RPC框架(远程过程调用),RPC框架将服务提供者(服务端)和调用者(客户端)分布在不同机器上,由客户端调用远程服务提供的方法。grpc使用protocol buffer来做数据序列号和反序列号,并使用http2做为数据传输协议。本篇博文具体介绍grpc-java的接口定义、服务端和客户端代码开发。
这几天在做web端实时展示服务端日志文件新增内容的功能。要满足实时的需求,我选择的方案是在web端跟服务端建立一个websocket链接,由服务端通过tail -f 命令将文件新增内容发送给web端。这里我主要想介绍的是在spring-boot框架下如何发布websocket服务。
博文主要将python使用过程中的一些问题进行记录,主要内容涉及到python导入第三方模块module,使用httplib2发送http请求,文件读取等操作,解析JSON字符串,操作mysql数据库,crontab执行python脚本时遇到的问题和解决方法。
在本地开发过程中,对代码进行Debug能逐行对代码逻辑进行调试,方便准备的排查问题。但是当代码发布到线上时,如果运行过程中出现异常,仅仅依靠日志来排查问题的话,会比较耗时,而且经常由于日志不全等原因而不能快速准确定位问题,而通过对JAVA代码进行远程Debug能很好的解决这个问题。 这篇博文主要介绍在IDEA中配置JAVA代码远程Debug,以及需要注意的事项。
在使用IDEA开发的过程中,我们可以通过设置代码注释模版,实现注释信息的自动补齐,提高编码效率。 我使用的是Mac电脑,就以Mac环境来进行说明吧。
最近在写SQL语句时,对选择IN 还是Exists 犹豫不决,于是把两种方法的SQL都写出来对比一下执行效率,发现IN的查询效率比Exists高了很多,于是想当然的认为IN的效率比Exists好,但本着寻根究底的原则,我想知道这个结论是否适用所有场景,以及为什么会出现这个结果。 网上查了一下相关资料,大体可以归纳为:外部表小,内部表大时,适用Exists;外部表大,内部表小时,适用IN。那我就困惑了,因为我的SQL语句里面,外表只有1W级别的数据,内表有30W级别的数据,按网上的说法应该是Exists的效率会比IN高的,但我的结果刚好相反!! “没有调查就没有发言权”!于是我开始研究IN 和Exists的实际执行过程,从实践的角度出发,在根本上去寻找原因,于是有了这篇博文分享。
JAVA虚拟机的垃圾收集器是虚拟机内存的清道夫,它的存在让JAVA开发人员能将更多精力投入到业务研发上。了解垃圾收集器,并利用好这个工具,能更好的保障服务稳定性。这篇文章通过分析JAVA虚拟机内存模型,介绍垃圾收集器常用算法和收集器类别,使得垃圾收集器的配置和使用变得不再遥不可及。
51CTO博客开发
本篇博客记录了在前端使用ajax上传图片,jersey框架后端接收处理的实施方案中可能出现的问题以及解决办法。前端JSP页面使用Ajax上传图片,后端使用Jersey框架提供restful接口接收处理图片。
介绍以管道方式执行批量redis命令,以及可能遇到的问题
eclipse里使用spring-mvc框架开发web项目,项目正常启动后能访问jsp页面,但jsp页面的网页效果没有生效,并提示jsp文件里提示js找不到,404错误。
本文介绍了https相对http的优势,并介绍了https的工作流程,最后对本地证书的生成、配置和使用进行了操作试用,适合初接触和配置https的朋友参考使用。
近段时间使用crontab 定时执行shell脚本,来解析java项目日志,实现“日志解析”跟项目的业务逻辑解耦。编写shell脚本时倒是挺顺利的,但在添加crontab定时执行shell脚本时,遇到了麻烦事......
博文中介绍了SpringMVC的初步配置和应用,包括web.xml、applicationContext.xml、controller-servlet.xml配置文件解析,类文件中的对象和方法注解配置,业务逻辑跳转说明,页面路径和跳转介绍。
WSDL文档是Web Service接口开发和部署规范的具体描述文档,十分重要。一个接口的WSDL文档里会包含接口部署时的服务名(service name),接口的绑定信息,绑定端口信息和接口方法中的参数信息等。根据这些信息,我们可以通过WSDL文档反向自动建立接口的java代码结构,提高开发工作效率。 这篇博客主要是介绍一下使用WSDL文档反向自动建立接口的java代码结构,以及如何部署webservice服务的步骤。
这篇博客根据我在项目中的flume使用经历,总结出一些基本的关于flume应用的经验教训,并对flume的特点和应用做一些介绍。同时,对可能出现的问题和建议的解决方案进行了说明,供出现类似问题的朋友进行参考。
SSH Secure Shell Client是SSH命令行控制终端,你应该是用SSH Secure File Transfer Client传输文件。这里只谈论他的使用方法,关于SSH配置你再找其他文章。一、登陆方法你可以在登陆的SSH Secure Shell Client里单击工具栏里(或菜单)的New File Transfer Window,就直接登陆了。也可以单独运行SSH Secur
文章摘自http://chenxu.wo.blog.163.com/blog/static/50239687201162310620634/
近期在研究Mondrian+Jpivot多维数据分析框架,在查询相关文档过程中,发现中文的文档较少。为了方便其他同志们查询和借鉴,我抽空花了几个晚上将原来的英文官方文档进行翻译,内容包含了Mondrian建模过程中会用到的基本属性概念。由于水平有限,如果有Mondrian达人对翻译结果有修改的意见和建议,本人欢迎提出来,一起学习交流。
本文主要是对java web项目中使用Mondrian的多维数据分析和展示做了初步介绍,包括Mondrian功能介绍,需要使用到的文件和包,同时对Mondrian的配置做了简单详细的说明,并附带了样例供初学者参考。 有关细节,正在慢慢积累,有望后续进行深入和完善。
在Ubuntu10上安装JDK1.8.0,找了一天的文档,很多都有问题。上述两个地方非常好的解决了我的问题,虽然过程中自己也另外做了很多探索和尝试。anyway,总算是装好了。
我这几天在MAC Pro上安装MySQL,并在Mac的终端窗口上使用MySQL命令行创建数据库和导入数据备份的.sql文件,由于很少用过MAC Pro的操作系统,所以有些操作不甚熟悉,也因此浪费了不少时间。为了让其他可能会遇到我这些情况的朋友们能少走弯路,节约精力,我把遇到的问题和解决方法在这里做一点记录,希望对大家能有所帮助。
本篇博客主要内容转载自博文:http://blog.sina.com.cn/s/blog_a0de59cf01019lbz.html。 主要介绍了Spring框架中集成JDBC的query查询操作内部实现的过程,包括获取查询语句后,如何执行查询,又如何将查询结果封装到指定的结果Bean中。对于理解getJdbcTemplate().query()的功能细节有一定帮助。
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号