Skip to content

Commit

Permalink
feat(post): 完善文章
Browse files Browse the repository at this point in the history
  • Loading branch information
李济芝 committed Jun 12, 2024
1 parent 17c4542 commit 504ea3c
Show file tree
Hide file tree
Showing 16 changed files with 894 additions and 142 deletions.
21 changes: 10 additions & 11 deletions blog-site/content/posts/essays/Java程序常见问题.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,20 +230,16 @@ JVM参数说明:https://www.oracle.com/java/technologies/javase/vmoptions-jsp.
2. 确定JVM调优目标。如果内存分配过大或过小,或者采用的GC收集器比较慢,则应该优先调整这些参数,并且先找1台或几台机器进行测试,然后比较优化过的机器和没有优化的机器的性能对比,并有针对性的做出最后选择。
3. 不断的分析和调整,直到找到合适的JVM参数配置。

## 接口慢
线上接口很慢,线上生产问题,我们绝对不能马虎放过抱着侥幸心理,必须要找到根本原因及时处理,防止下次留下更大的坑.大致思路要定位接口问题,然后具体问题具体分析,讨论不同解决方案.
## 线上接口慢

### 定位问题
要快速定位接口哪一个环节比较慢,性能瓶颈在哪里,可以使用应用性能监控工具(APM)定位问题。常见工具: skywalking、pinpoint、cat、zipkin。
首先要定位是哪里慢,定位接口哪一个环节比较慢,性能瓶颈在哪里可以使用应用性能监控工具(APM)定位问题。常见工具: skywalking、pinpoint、cat、zipkin。

如果应用程序没有接入APM,可以在生产环境装一下arthas,利用trace接口方法和火焰图,大概能分析是那一块比较慢,定位能力稍微有点粗糙亦可以利用程序中的告警日志定位问题。
如果应用程序没有接入APM,可以在生产环境装一下arthas,利用trace接口方法和火焰图,大概能分析是那一块比较慢,定位能力稍微有点粗糙亦可以利用程序中的告警日志定位问题。

### 解决办法
- 扩容;哪里扛不住了哪里扩容,应用自动扩容、redis扩容、mysql在线扩容、kafka分区扩容等;
- 应用重启;如果部分节点线程已经扛不住了,就需要重启释放对应资源;
- 优化代码逻辑;上面两种是比较应急的做法,如果已经定位出来,就需要优化代码逻辑,完成后走hotfix灰度发版;

### 常见优化接口方案
如果已经定位到具体是哪里的问题了,那么就可以进行解决,如果是最新的功能引起的,那么最快的办法就是回退版本。
以下是几种常见接口慢的情况。

#### 数据库慢sql
如果是数据库sql慢,可以使用执行计划去分析一下,常见sql慢的几种情况:
Expand All @@ -263,8 +259,8 @@ JVM参数说明:https://www.oracle.com/java/technologies/javase/vmoptions-jsp.
- 缓存查询结果;考虑当前查询结果是否能做缓存,如用户信息等短时间内不会变化的信息,根据业务形态来决定;

#### 中间件慢
- redis慢是否有大key、热key,可接入hotkeys监控;针对热key可以使用本地缓存来抗,针对大key可以将其拆分,采用set结构的sismember等方法
- kafka慢;生产端慢:可以使用堵塞队列接收,批量丢消息;消费端慢:消费端慢会造成消息积压,可以扩分区、增加消费节点、增加消费线程,用数据机构接受批量写入库;
- redis慢是否有大key、热key,可接入hotkeys监控;针对热key可以使用本地缓存来抗,针对大key可以将其拆分,采用set结构的sismember等方法
- kafka:生产端慢:可以使用堵塞队列接收,批量丢消息;消费端慢:消费端慢会造成消息积压,可以扩分区、增加消费节点、增加消费线程,用数据机构接受批量写入库;

#### 程序逻辑慢
- 非法校验逻辑前置;避免无用数据穿透小号系统资源,减少无效调用;
Expand All @@ -283,3 +279,6 @@ JVM参数说明:https://www.oracle.com/java/technologies/javase/vmoptions-jsp.
- 接入监控告警;error日志告警、接口慢查询或者不可用或限流熔断告警、DB告警、中间件告警、应用系统告警等;
- 接口需要加动态配置开关;能够快速切断流量或降级某些非核心服务调用;
- 设计程序自愈能力;比如如果数据有问题,用配置好的程序逻辑自动去修复;

## @Transactional常见问题

6 changes: 3 additions & 3 deletions blog-site/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ <h2><a href='/iblog/posts/ideology/other-code-07/'>代码之外-谈谈事业</a>

<div class="list">
<div class="post_content markdown">
<p>注意,这里说的是事业,不是工作。 事业与工作都是做事情,二者最本质的区别我认为就是有没有使命感。工作是靠它赚钱养家糊口,事业就是即使不挣钱哪怕让你倒贴钱你都乐意的......</p>
<p>这里说的是事业,不是工作。 事业与工作都是做事情,二者最本质的区别我认为就是有没有使命感。工作是靠它赚钱养家糊口,事业就是即使不挣钱哪怕让你倒贴钱你都乐意的干的事......</p>
</div>
</div>

Expand Down Expand Up @@ -560,12 +560,12 @@ <h2><a href='/iblog/posts/ideology/love-and-marriage-17/'>曾仕强-爱情与婚

<div class="post animated fadeInDown">
<div class="post_title">
<h2><a href='/iblog/posts/ideology/other-code-06/'>代码之外-人生编码(下)</a></h2>
<h2><a href='/iblog/posts/ideology/other-code-06/'>代码之外-随笔0512</a></h2>
</div>

<div class="list">
<div class="post_content markdown">
<p>如果我们只思考不能去做就成了空想,如果我们不能去改变,那我们的思考就失去了意义。 在代码之外-人生编码(上)中提到了我们能做的很少,我们是很有局限性的,我们是在有......</p>
<p>如果我们只思考不能去做就成了空想,如果我们不能去改变,那我们的思考就失去了意义。那我们如何在有限的范围内做选择,来尽量提高自己命运的下限? 分享出来的东西我都是已......</p>
</div>
</div>

Expand Down
8 changes: 4 additions & 4 deletions blog-site/public/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
<link>http://localhost:1313/iblog/posts/ideology/other-code-07/</link>
<pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/ideology/other-code-07/</guid>
<description>注意,这里说的是事业,不是工作。 事业与工作都是做事情,二者最本质的区别我认为就是有没有使命感。工作是靠它赚钱养家糊口,事业就是即使不挣钱哪怕让你倒贴钱你都乐意的</description>
<description>这里说的是事业,不是工作。 事业与工作都是做事情,二者最本质的区别我认为就是有没有使命感。工作是靠它赚钱养家糊口,事业就是即使不挣钱哪怕让你倒贴钱你都乐意的干的事</description>
</item>
<item>
<title>曾仕强-爱情与婚姻-非离婚不可时的六大要点</title>
Expand Down Expand Up @@ -100,11 +100,11 @@
<description>夫妻要得到外边人的尊重就需要及时调整自己的角色,要记住只有“卧室”里面才是夫妻。 就比如夫妻都在同一家公司上班,如果在上班期间还像夫妻那样,公司就会把你开除,所以</description>
</item>
<item>
<title>代码之外-人生编码(下)</title>
<title>代码之外-随笔0512</title>
<link>http://localhost:1313/iblog/posts/ideology/other-code-06/</link>
<pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/ideology/other-code-06/</guid>
<description>如果我们只思考不能去做就成了空想,如果我们不能去改变,那我们的思考就失去了意义。 在代码之外-人生编码(上)中提到了我们能做的很少,我们是很有局限性的,我们是在有</description>
<description>如果我们只思考不能去做就成了空想,如果我们不能去改变,那我们的思考就失去了意义。那我们如何在有限的范围内做选择,来尽量提高自己命运的下限? 分享出来的东西我都是已</description>
</item>
<item>
<title>曾仕强-爱情与婚姻-结婚的目的在于创造生命</title>
Expand All @@ -121,7 +121,7 @@
<description>男怕入错行女怕出错郎,说的就是婚姻一旦出错是很难挽回的,所以一开始就要非常的慎重,要有目标、有计划、有目的,然后按部就班一步一步,循序渐进,不要着急。 所以男女双</description>
</item>
<item>
<title>代码之外-人生编码(上)</title>
<title>代码之外-随笔0510</title>
<link>http://localhost:1313/iblog/posts/ideology/other-code-05/</link>
<pubDate>Fri, 10 May 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/iblog/posts/ideology/other-code-05/</guid>
Expand Down
Loading

0 comments on commit 504ea3c

Please sign in to comment.