- 博客(21)
- 收藏
- 关注
原创 线程安全的List
今天写代码的时候需要用到线程安全的List,大脑开始遍历发掘,有个Vector,性能有点差,看了网上的博客,常用的有两个synchronizedList和CopyOnWriteArrayList。分析synchronizedList无论是读取还是写入,它都会进行加锁,当我们并发级别特别高,线程之间在任何操作上都会进行等待,因此在某些场景中它不是最好的选择。在很多的场景中,我们的读取操作可能远远大于写入操作,这时使用这种方式,显然不能让我们满意,那么怎么办呢?别担心,JDK已经为我们考虑好了,为了将读
2021-07-31 11:34:29 1140
原创 mysql时区产生数据不一致问题
今天测试小哥说:接口查出来的依赖表到达时间跟数据库里的不一致,我当时就提供了 排查思路:1.看一下应用配置的数据库地址对不对2.不行的话,重启一下应用,可能是有人更改配置没有重启应用几分钟后测试告诉我,还不行,好吧,好像得亲自出马了.配置idea远程反复debug,触发接口,查看connection的信息,ip,端口号,库都对啊,怎么查出来的时间就不一样呢?真实出鬼了!!!本地main方法测试,也没有出现不一致的问题!顿时感觉走到了职业生涯的尽头,还能出现这种问题?正在一筹莫展之际,
2021-05-27 17:51:53 396
原创 MAT工具分析OOM异常
背景:早上晨会,运维小哥说63环境特别卡,用户一直在反映了,我说好的,我看一下什么问题。按照平常的步骤巡检,1.CPU,2.磁盘,3.服务状态,看了一下都没啥问题,然后我就猜:难道是fullGC了?输入 命令jps找到服务pid,jstat -gc pid 1000 10,果然:看看fullGC了150+次肯定代码出问题了,查看日志有Java heap space的OOM异常,服务配置的有OOM时导出dump文件,OOM时无非两种原因,1.真的内存不够用了,2.循环产生对象导致内存溢出。
2021-05-07 18:13:39 1285 1
原创 关于离线开发平台的优化思路
什么是数据中台?数据中台就是利用大数据技术对海量数据进行采集,计算,加工,存储并形成统一的标准和口径。数据中台有什么用?在业务快速发展的今天,利用数据中台技术可以快速组合式创新业务。数据中台怎么用?像阿里已经成型的产品dataworks,我们的离线开发平台,都包含了:1.数据开发 2.任务调度 3.数据质量 4.数据地图 5.数据生命周期数据是数据中台的基础,调度是数据中台的灵魂!怎样让数据中台快速可靠的运行变得尤为重要!那么从哪些部分做出针对性优化以提高数据中台的性能呢?本篇文
2021-04-17 14:33:54 791 1
原创 java调远程服务器的shell脚本以及停止
最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。考虑再三,有两种实现方式:方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端口调目标服务器的程序,然后程序调本机上的shell脚本!优点:通过端口调用,用户不用暴露服务器的账号密码,安全性高缺点:我们需要一直维护这个客户端程序,而且每接入一台服务器,都得安装该客户端,另外非常考验客户端程序的健壮性。方案二:本地直接通过IP,服务器账号密码调远程服务器的shell脚本优
2021-03-17 16:51:06 1400 5
原创 shell获取数据库的主从状态
原来的运维小哥跑路了,目前项目上的运维工作由测试小哥暂时支持,晨会上,测试小哥说目前工作量有些大,其中就说到:每天都要检查各个环境的数据库主从状态。检查步骤:1.登录目标服务器2.登录mysql3.输入show slave status\G;4.检查Slave_IO_Running,Slave_SQL_Running,Seonds_Behind_Master等属性的值这只是一个环境的检查步骤,有几个环境就要重复几次这样的操作,以程序员的思维来讲,这是愚蠢的,非常非常不可取的!!!!
2021-03-11 15:12:34 504 4
原创 性能优化之druid连接池监控
正在被云化干的一头雾水的时候,测试小哥说:“63环境有个任务出问题了,处理一下”。咱是出了名的老好人,来吧,看是啥问题!后台日志显示连接池不够用了,无非两种情况:1.数据库操作多2.单次数据库操作时间长对于第一种情况,咱们只能增加最大连接数,或者做批量操作,例如:循环插入改为批量插入,一般有经验的开发选手都不会循环插入。咱们着重看第二种情况:单次数据库操作时间长怎么确定是哪个数据库操作时间长呢?怎么定位?我给老铁们两个方案,一种是mysql的慢sql日志,这是我们通常用的方法
2021-03-04 17:44:45 841 1
原创 curl命令测试接口
最近要作为服务端上线两个接口,供数据资产项目调用,由于接口没有增删改操作,只有查询操作,也没有机密信息,调用对项目没有影响,怎么能在上线后,测试一下接口是否能正常返回,于是我想起了curl命令!谨记,一般生产上不能这样操作!Curl命令模拟Post请求带参数的post请求:如,post接口请求的链接为:https://api.xxxx.com/xxx/search/list?c={“cc”:1602,“ct”:20,“dt”:1,“ov”:20,“p”:xxx,“v”:...
2021-01-15 15:29:07 1637
原创 线上系统没做性能优化,说炸就炸
最近一直在搞性能优化,正好遇到一些线上调优的一些困惑,希望一起探讨一下。之前有朋友跟我说,他们公司的系统从来没有经过性能调优,功能测试完成后就上线了,线上也没有出现过什么性能问题呀,为什么要进行调优呢??当时我一脸懵逼,既然不做性能优化就直接上线,相当于给系统埋了一个定时炸弹,一旦到某个临界点,说炸就炸,到时候回天乏力。因此我就回答了他一句,“如果你们公司做的是淘宝,京东,12306 这样的网站,不做系统性能优化就上线,试试看会是什么情况”。所以,这篇文章就是想弄明白几个问...
2020-11-24 15:52:49 282
原创 【MySQL】MySQL Insert into select 大量锁表导致无法插入
背景最近发现项目中有个表,越来越大 ,竟然快50G,不由得一身冷汗,看了一下代码,之前有清理策略,由于应用主节点的选举有bug,导致应用目前没有主节点,故这个表没有清理,这个表每天要新增两万左右的数据,而且有一些大字段,所以表占用的磁盘空间比较大,目前运维小哥哥给的解决方案是建个表结构相同的表a,将该表中的七天内的数据插入到表a中(Insert into a select * from 原始表 where createtime < 7天内的数据),将原始表改名为b,将a表rename为原始表...
2020-11-23 16:41:33 2137 1
原创 性能优化之为优化接口做铺垫
背景作为一名有良心的开发选手,既然要做产品,咱们就要把产品做好,让用户有更好的用户体验,好的用户体验体现在哪里呢?1.精简的业务逻辑2.表现层(视觉,界面,导航设计):良好的页面展示3.强力的后台处理能力4.最大程度解决用户的问题5.有求必应的运维体系今天就从第三点“强力的后台处理能力”入手,强力的后台处理能力体现在哪里?无非就是,前端请求后台接口的处理速度,这时候有些老铁可能想起来,F12里面的接口耗时,但是这只是一部分接口的时间,我们怎样来统计整个项目的接口耗时呢?你可...
2020-11-19 17:10:07 345 1
原创 设计模式之代理模式
今天,来聊一下代理模式吧。什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的。先定义一种类型的女人:public interface KindWomen { //这种类型的女人能做什么事情呢?public void makeEyesWithMa...
2020-11-13 16:08:39 195
原创 设计模式之策略模式
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子 的。 先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用 JAVA 程序怎么表现这个呢?三个妙计是同一类型的东东,那咱就写个接口:public interface IStrategy...
2020-11-12 18:06:07 234
原创 又是性能优化的一天之java性能优化
背景最近写了一些关于性能优化的文章,还是想给老铁们写一下关于java性能优化的细节,有助于我们在开发时写出更好的代码,提高代码效率!1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。2....
2020-11-11 17:38:56 227
原创 又是性能优化的一天之接口问题排查
背景今天领导给了个任务,页面上有个功能请求接口特别慢,需要优化一下,哇,又是充满希望的一天!问题排查打开F12看接口的执行时间,妈耶,执行了6.22秒,如果任务以来很多的话,那岂不是更慢,怪不得有些用户反映接口慢的要命。用arthas(阿尔萨斯)排查接口中的慢方法,开启arthas,选择需要监控的服务trace命令格式:trace 全路径类名 方法名执行tracecom.dtstack.batch.service.job.impl.BatchJobJobServi...
2020-11-09 20:20:13 1123 1
原创 又是性能优化的一天之连接池
背景今天接了个需求,页面任务运行和保存提交按钮等待时间特别长,页面转圈圈,于是充满希望的一天开始了!问题分析性能监测,于是乎,我想起了阿里开源性能检测工具arthas(阿尔萨斯),它能监测接口连路上每个方法的运行时间,可以直观的看到接口到底哪一步比较慢,由于我也是刚刚接触这个工具,后续我会专门出一期关于这个工具安装和使用的文章,老铁们不要着急,平常有点忙,文章产量不大,见谅见谅。运行按钮里面调了多个接口,将任务里面的sql语句按分号截取发给集群运行,任务中有几个sql,就会产生多少个接口..
2020-11-04 19:08:37 1393
原创 mysql存量表数据碎片与索引碎片优化
背景最近领导分配了个任务,测试sit环境一些功能相比之前慢了许多,需要优化一下。问题排查过程浏览器F12查看相关接口的响应,看到底是哪个接口反应慢,根据互联网的要求,页面3秒还没有显示出来,用户体验会非常差。查看相关代码的提交时间,这些代码一上线就没有改动过,由此以我三年职业生涯的经验推断,可能是接口相关数据库表设计不合理或者需要优化导致的问题,因而该篇文章由此诞生!数据库单表优化步骤设计表时:1.选择合适的字段类型 2.创建高性能索引...
2020-10-30 17:44:17 2017 1
原创 java线上故障排查技巧-cpu
线上故障主要包括CPU,磁盘,内尺寸以及网络问题,大多数故障可能会包含多个层面,所以排查时尽量四个方面依次排查一遍。CPU问题出现原因:业务代码(死循环),频繁GC以及上下文切换,数据库排序计算等等。首先java应用排查:1.使用jstack分析CPU问题首先我们用jps找到对应java进程的pid,top pid,看一下哪一个线程的占用比较高,然后top -H -p 线程pid ,找到CPU使用率较高的线程。可以看到线程41964线程的cpu的占用率较高,然后我们将41...
2020-10-20 20:32:46 416 1
原创 线上运行一年的代码竟然查出问题了?
由于轮训服务改造的原因,线上运行了一年的代码竟然出问题了,话不多说,直接抛问题!!!问题介绍我们的项目是一个任务调度的平台,每天都有大量的任务需要发送到大数据集群进行处理,在发送前,需要判断是否达到跑批要求。每天晚上11点会生成第二天的周期实例,周期实例有个跑批调度时间,到达该时间,调轮训服务获取任务依赖表是否到达。任务提交轮训逻辑...
2020-10-10 17:44:06 394 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人