作者:京东科技徐传乐背景在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在StopTheWorld问题,因此很容易导致服务超时,引发性能问题。事情最初是线上某应用垃圾收集出现FullGC异常的现象,应用中个别实例FullGC时间特别长,持续时间约为15~30秒,平均每2周左右触发一次;JVM参数配置“-Xms2048M–Xmx2048M–Xmn1024M–XX:MaxPermSize=512M”排查过程Ø分析GC日志GC日志它记录了每一次的GC的执行时间和执行结果,通过分析GC日志可以调优堆设置和
前两天看到一群里在讨论Tomcat参数调优,看到不止一个人说通过accept-count来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的WebServerTomcat,这篇文章就来聊下Tomcat调优,重点介绍下线程池调优及TCP半连接、全连接队列调优。Tomcat线程池先来说下线程池调优,就拿SpringBoot内置的Tomcat来说,确实是支持线程池参数配置的,但不是accept-count参数,可以通过threads.max和threads.minSpare来配置线程池最大线程数和核心线程数。如果没有设置,则会使用默认值threads.max:200threads.mi
前两天看到一群里在讨论Tomcat参数调优,看到不止一个人说通过accept-count来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的WebServerTomcat,这篇文章就来聊下Tomcat调优,重点介绍下线程池调优及TCP半连接、全连接队列调优。Tomcat线程池先来说下线程池调优,就拿SpringBoot内置的Tomcat来说,确实是支持线程池参数配置的,但不是accept-count参数,可以通过threads.max和threads.minSpare来配置线程池最大线程数和核心线程数。如果没有设置,则会使用默认值threads.max:200threads.mi
问题现象最近在本地调试公司的一个Web项目时,无意中发现日志中出现了两次同一个服务的init记录,项目都是基于Spring来搭建的,按理说服务都是单例的,应该只有一次服务加载日志才对,本着对工作认真负责(闲来无事)的态度,必然要一探究竟。问题分析为什么同一个Bean会被容器初始化两次?首先,我们先来梳理一下Web容器中如何加载Bean:在Web容器中,ContextLoaderListener和DispatchServlet都会在容器启动的时候加载Bean,区别在于DispatchServlet一般会加载MVC相关的Bean,ContextLoaderListener会加载Spring相关的B
问题现象最近在本地调试公司的一个Web项目时,无意中发现日志中出现了两次同一个服务的init记录,项目都是基于Spring来搭建的,按理说服务都是单例的,应该只有一次服务加载日志才对,本着对工作认真负责(闲来无事)的态度,必然要一探究竟。问题分析为什么同一个Bean会被容器初始化两次?首先,我们先来梳理一下Web容器中如何加载Bean:在Web容器中,ContextLoaderListener和DispatchServlet都会在容器启动的时候加载Bean,区别在于DispatchServlet一般会加载MVC相关的Bean,ContextLoaderListener会加载Spring相关的B
大家好,我是陶朱公Boy,又和大家见面了。前言在文章开始前,想先问大家一个问题,大家平时在项目需求评审完后,是直接开始编码了呢?还是会先写详细设计文档,后再开始进行编码开发?☆现实这个时候可能有部分小伙伴会出来反驳:还详细设计呢连给开发的时间都不够,项目经常被倒排期。作者其实能感同身受上述小伙伴说的话。目前国内很多互联网公司,为了快速抢占市场,老板恨不得今天出产品需求明天就能见到产品。于是不可避免出现一种情况:一个月的工期硬是压缩到两周,别说写文档了,能把代码写完就已经不错了。☆建议作者对这种工期倒排的情况一直都是嗤之以鼻。这样的系统上线后期副作用太大(功能到处都是bug,用户体验也差,几乎是
大家好,我是陶朱公Boy,又和大家见面了。前言在文章开始前,想先问大家一个问题,大家平时在项目需求评审完后,是直接开始编码了呢?还是会先写详细设计文档,后再开始进行编码开发?☆现实这个时候可能有部分小伙伴会出来反驳:还详细设计呢连给开发的时间都不够,项目经常被倒排期。作者其实能感同身受上述小伙伴说的话。目前国内很多互联网公司,为了快速抢占市场,老板恨不得今天出产品需求明天就能见到产品。于是不可避免出现一种情况:一个月的工期硬是压缩到两周,别说写文档了,能把代码写完就已经不错了。☆建议作者对这种工期倒排的情况一直都是嗤之以鼻。这样的系统上线后期副作用太大(功能到处都是bug,用户体验也差,几乎是
简介本文给大家推荐博主自己开源的电商项目newbee-mall-pro。在newbee-mall项目的基础上搭建而来,使用mybatis-plus作为orm层框架,并添加了一系列高级功能以及代码优化,特性如下:商城首页【为你推荐】栏目添加协同过滤算法。按照UserCF基于用户的协同过滤、ItemCF基于物品的协同过滤,实现了两种不同的推荐逻辑。RedisSearch:支持中文分词搜索,支持商品名称、简介、标签作为搜索项,以及新品、价格排序。RediSearch是一个源码可用的Redis模块,可以对Redis进行查询、二级索引和全文搜索。这些功能支持在文本查询之上进行多字段查询、聚合、精确短语匹
简介本文给大家推荐博主自己开源的电商项目newbee-mall-pro。在newbee-mall项目的基础上搭建而来,使用mybatis-plus作为orm层框架,并添加了一系列高级功能以及代码优化,特性如下:商城首页【为你推荐】栏目添加协同过滤算法。按照UserCF基于用户的协同过滤、ItemCF基于物品的协同过滤,实现了两种不同的推荐逻辑。RedisSearch:支持中文分词搜索,支持商品名称、简介、标签作为搜索项,以及新品、价格排序。RediSearch是一个源码可用的Redis模块,可以对Redis进行查询、二级索引和全文搜索。这些功能支持在文本查询之上进行多字段查询、聚合、精确短语匹
概述本文向整个软件行业展示了出现GPT后的软件开发流程的颠覆性变化。由于这只是一个简单的案例,并没有涉及代码初次编写后的debug以及变更维护的流程。通过纳入GPT以及一些其他的开发环节和工具,后GPT时代的软件开发估计至少可以降低0%以上的人工编码量,50%以上的测试工作量,以数量级规模提成文档完整率。想进一步了解如何构造完整后GPT时代的开发流程请直接联系本人文档都说重要,但几乎没人写面试的时候,如果有应聘的人敢于掷地有声得说其实写代码不需要文档,那么大概率是不会被发offer的。但是在团队里如果有人每天坚持先写文档然后去写代码,或者每次改bug时候都要把相关文档都写清楚,估计这兄弟的KP