首页
学习
活动
专区
工具
TVP
发布

后端沉思录

专栏作者
46
文章
49544
阅读量
13
订阅数
生产应用频繁fullgc分析
接下来,dump内存,这里注意一点,dump时切记让运维同学把dump的机器从集群中摘掉,否则dump时会造成JVM线程停顿,导致超时告警,影响业务。dump结果使用MAT(Eclipse Memory Analyzer)分析,具体截图就不展示了,从支配树上可以看出,某个缓存对象占用空间很大,个数非常多。从业务代码中查看,发现该对象是个本地缓存对象(Guava Cache),缓存3分钟,而且是个配置项,按照不同业务线、城市,总共才500个,每个配置项比较小,怎么会突然占用这么大空间呢?使用jstat命令查看系统的垃圾回收统计情况,发现YGC大概每10s一次,对于一个对象,即在年轻代中驻留约15*10=150s,再晋升到老年代,也就是在缓存有效期内,缓存对象足够晋升到老年代,缓存失效时,则会创新创建对象放入缓存。初步结论是:缓存过期时间过小导致对象晋升到老年代过快。
LiosWong
2022-08-30
4160
批量处理工具类
业务开发中,时常会批量执行任务,例如批量同时调用4个http接口或者rpc接口,这类业务代码执行具有通用性,为了提高开发效率、可复用性、可扩展性,简化代码,抽象出通用的工具类,方便开发同学使用。使用者只关心入参、具体任务执行、以及任务执行结果、线程池,并不关心批量处理的过程。
LiosWong
2021-12-13
3810
打车业务闭环思考
刚接触到打车业务时,很好奇我们的整体业务链路是什么样的?系统如何圈司机?订单通过什么方式派给司机?订单的状态如何跃迁?等等一连串的疑问,困扰着我,当然产生了更加强烈的兴趣,驱使不断学习周边业务。站在目前我所在的业务模块,用图示简略的概括供需撮合、业务驱动、全局架构图,而形成业务闭环,更加细节的系统交互就不作多述。
LiosWong
2021-12-09
2080
队列机组件实现
对比单机环境下的模型来看,分布式环境的队列机更为复杂,阻塞队列当然不能再使用java提供的工具类,本文使用redis作为队列,使用redis哪种数据类型作为存储方式呢,这里选择zset,不仅仅是为了实现生产消费,结合zset数据结构,而且还可以实现延迟队列。下面介绍延迟队列机的组件实现方式。
LiosWong
2021-12-01
2230
生产-消费模型组件实现 Producer Consumer Solution using BlockingQueue
原来各个应用某些业务节点的日志通过filebeat+elk收集,供各个业务方使用,线上发现filebeat消耗非常大的硬件资源,而且应用集群较大,每次新增日志类型时需要新增filebeat配置并启动新的应用进程,较为繁琐和耗服务器资源;优化成通过kafka收集日志,consumer消费并写入es,考虑到频繁的写入es会造成应用资源、网络开销的浪费,设计上为批量写入es。该应用场景比较通用,考虑把该生产-消费模型 抽成组件放入公共模块。
LiosWong
2021-07-14
2090
生产-消费模型组件实现 Producer Consumer Solution using BlockingQueue
原来各个应用某些业务节点的日志通过filebeat+elk收集,供各个业务方使用,线上发现filebeat消耗非常大的硬件资源,而且应用集群较大,每次新增日志类型时需要新增filebeat配置并启动新的应用进程,较为繁琐和耗服务器资源;
LiosWong
2021-06-11
4360
useful-scripts
python使用相对简单,快速便捷,很适合作为脚本开发;作为"资深"的sub3/vscode控,使用编辑器鞋脚本再也适合不过,vscode中的调试功能太好用啦:
LiosWong
2020-09-01
5600
Metaspace内存不足导致FGC问题排查
清楚的记得是2020/7/25 14:34分左右,周六的下午,我还在公司苦逼的加班中,突然钉钉告警群里出现大量应用OP的dubbo超时调用、空指针异常,异常中间还有Metaspace元空间不足等异常:
LiosWong
2020-09-01
3.2K0
dubbo消费者启动报错分析
通过图可知 org.apache.dubbo.registry.integration.RegistryProtocol#destroy该方法都会在 org.apache.dubbo.config.bootstrap.DubboBootstrap#destroy中被调用,而且是通过Spring ContextClosedEvent事件(容器关闭时)、JVM钩子函数(JVM退出)触发。报错的具体位置,在方法 org.apache.dubbo.config.context.ConfigManager#getApplicationOrElseThrow中,通过断点分析 org.apache.dubbo.config.context.ConfigManager#getConfig(java.lang.String)中获取配置信息时, configsCache为空,所以该方法的返回值为null,上层方法就报错了。
LiosWong
2020-03-10
6.4K2
arthas简单使用
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱,项目地址.当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
LiosWong
2019-11-06
4940
Dubbo服务引入
该文介绍Dubbo的服务引入.在Dubbo中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用.服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用.因此,本文我将重点分析通过注册中心引用服务的过程. 运行 demo-dubbo--》dubbo-demo-api--》dubbo-demo-api-consumer 中 Application:
LiosWong
2019-11-06
4300
Dubbo服务暴露过程解析
Dubbo SPI的暴露原理参考https://lioswong.github.io/2019/09/17/Dubbo-SPI%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/,本文分析服务暴露过程,运行 demo-dubbo--》dubbo-demo-api--》dubbo-demo-api-provider 中 Application:
LiosWong
2019-11-06
1.1K0
Dubbo SPI实现原理
Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求,在 Dubbo 中,SPI 是一个非常重要的模块。基于 SPI,我们可以很容易的对 Dubbo 进行拓展. 本篇文章通过示例说明,先 download 代码,然后在 demo-dubbo--》dubbo-demo-api--》dubbo-demo-api-provider 下新建类:
LiosWong
2019-11-06
1.2K0
Map元素排序
开发中会遇到对Map元素排序的问题,下面介绍下如何根据key、value排序. key排序 使用TreeMap的Comparator比较 TreeMap默认是升序的,如果需要自定义排序规则,可以使用Comparator: Map<String, Integer> map = new TreeMap<String, Integer>(new Comparator<String>() { // 按照key排序 @Override publi
LiosWong
2019-11-06
5470
zookeeper入门
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。 ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。--维基百科
LiosWong
2019-05-13
6460
模版方法
模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤.在软件工程中,它是一种软件设计模式,和C++模板没有关连.--维基百科
LiosWong
2019-03-15
1.7K0
史上最全国家统计局划分代码爬取
由于工作中使用国家统计局划分的区域码,本文使用python爬取地方划分码,地址:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/ 本文爬取的是2018年发布的划分码,最新的划分码分为省、市、县、城镇、村庄. 代码:
LiosWong
2019-03-14
1.2K0
scrapy爬取1024种子
1024不必多说,老司机都懂,本文介绍scrapy爬取1024种子,代码不到50行!Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 关于scrapy用下图来说明即可(图片来自https://cuiqingcai.com/3472.html )
LiosWong
2019-03-14
2.7K0
策略模式
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。--维基百科 在项目中时常会用到策略模式的场景,比如业务中需要支付,但是有多个支付渠道,那如何对上层业务暴露"统一口径"(接口)呢,下面结合代码说明, 首先定义支付接口:
LiosWong
2019-03-14
4060
python小白爬取某东bra数据分析
最近用python爬取了某东上的x款bra的用户评论,然后进行了size、color分析,直接上图:
LiosWong
2019-02-28
5870
点击加载更多
社区活动
Python精品学习库
代码在线跑,知识轻松学
热点技术征文第五期
新风口Sora来袭,普通人该如何把握机会?
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品·最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档