Skip to content

Commit b6fada2

Browse files
author
leelovejava
committed
第三季 高并发
1 parent 8924a24 commit b6fada2

File tree

7 files changed

+365
-75
lines changed

7 files changed

+365
-75
lines changed

README.md

Lines changed: 75 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -314,169 +314,169 @@
314314

315315
- [33、能说说Spring中都使用了哪些设计模式吗?]()
316316

317-
34、额外加餐:能画一张图说说Spring Web MVC的核心架构吗?
317+
- [34、额外加餐:能画一张图说说Spring Web MVC的核心架构吗?]()
318318

319-
35、额外加餐:能画一张图说说Spring Cloud的核心架构吗?
319+
- [35、额外加餐:能画一张图说说Spring Cloud的核心架构吗?]()
320320

321321
### JVM
322322

323-
[36、JVM中有哪几块内存区域?Java 8之后对内存分代做了什么改进?](/docs/03/36.md)
323+
- [36、JVM中有哪几块内存区域?Java 8之后对内存分代做了什么改进?](/docs/03/36.md)
324324

325-
[37、你知道JVM是如何运行起来的吗?我们的对象是如何分配的?](/docs/03/37.md)
325+
- [37、你知道JVM是如何运行起来的吗?我们的对象是如何分配的?](/docs/03/37.md)
326326

327-
[38、说说JVM在哪些情况下会触发垃圾回收可以吗?](/docs/03/38.md)
327+
- [38、说说JVM在哪些情况下会触发垃圾回收可以吗?](/docs/03/38.md)
328328

329-
[39、说说JVM的年轻代垃圾回收算法?对象什么时候转移到老年代?](/docs/03/39.md)
329+
- [39、说说JVM的年轻代垃圾回收算法?对象什么时候转移到老年代?](/docs/03/39.md)
330330

331-
[40、说说老年代的垃圾回收算法?常用的垃圾回收器都有什么?](/docs/03/40.md)
331+
- [40、说说老年代的垃圾回收算法?常用的垃圾回收器都有什么?](/docs/03/40.md)
332332

333-
[41、你们生产环境中的Tomcat是如何设置JVM参数的?如何检查JVM运行情况?](/docs/03/41.md)
333+
- [41、你们生产环境中的Tomcat是如何设置JVM参数的?如何检查JVM运行情况?](/docs/03/41.md)
334334

335-
[42、你在实际项目中是否做过JVM GC优化,怎么做的?](/docs/03/42.md)
335+
- [42、你在实际项目中是否做过JVM GC优化,怎么做的?](/docs/03/42.md)
336336

337-
[43、你知道发生OOM之后,应该如何排查和处理线上系统的OOM问题?](/docs/03/43.md)
337+
- [43、你知道发生OOM之后,应该如何排查和处理线上系统的OOM问题?](/docs/03/43.md)
338338

339339
### 网络
340340

341-
[44_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(上)](/docs/03/44.md)
341+
- [44_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(上)](/docs/03/44.md)
342342

343-
[45_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(中)](https://mp.weixin.qq.com/s/MV1-UeiOzwKm_xWlNSFUvA)
343+
- [45_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(中)](https://mp.weixin.qq.com/s/MV1-UeiOzwKm_xWlNSFUvA)
344344

345-
[46_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(下)](https://mp.weixin.qq.com/s/MV1-UeiOzwKm_xWlNSFUvA)
345+
- [46_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(下)](https://mp.weixin.qq.com/s/MV1-UeiOzwKm_xWlNSFUvA)
346346

347-
47、浏览器请求www.baidu.com的全过程大概是怎么样的?(上)
347+
- [47、浏览器请求www.baidu.com的全过程大概是怎么样的?(上)]()
348348

349-
48、浏览器请求www.baidu.com的全过程大概是怎么样的?(下)
349+
- [48、浏览器请求www.baidu.com的全过程大概是怎么样的?(下)]()
350350

351-
49、画一下TCP三次握手流程图?为啥是三次而不是二次或者四次呢?
351+
- [49、画一下TCP三次握手流程图?为啥是三次而不是二次或者四次呢?]()
352352

353-
50、聊聊HTTP协议的工作原理!
353+
- [50、聊聊HTTP协议的工作原理!]()
354354

355-
51、聊聊HTTPS的工作原理?为啥用HTTPS就可以加密通信?
355+
- [51、聊聊HTTPS的工作原理?为啥用HTTPS就可以加密通信?]()
356356

357-
52、聊聊http的长连接的工作原理到底是啥?
357+
- [52、聊聊http的长连接的工作原理到底是啥?]()
358358

359-
53、MySQL、MyISAM和InnoDB存储引擎的区别是啥?(上)
359+
- [53、MySQL、MyISAM和InnoDB存储引擎的区别是啥?(上)]()
360360

361-
54、MySQL、MyISAM和InnoDB存储引擎的区别是啥?(下)
361+
- [54、MySQL、MyISAM和InnoDB存储引擎的区别是啥?(下)]()
362362

363-
55、聊聊MySQL的索引实现原理?各种索引你们平时都怎么用的?(上)
363+
- [55、聊聊MySQL的索引实现原理?各种索引你们平时都怎么用的?(上)]()
364364

365-
56、聊聊MySQL的索引实现原理?各种索引你们平时都怎么用的?(下)
365+
- [56、聊聊MySQL的索引实现原理?各种索引你们平时都怎么用的?(下)]()
366366

367367
### MySQl
368368

369-
57、你能说说事务的几个特性是啥?有哪几种隔离级别?(上)
369+
- [57、你能说说事务的几个特性是啥?有哪几种隔离级别?(上)]()
370370

371-
58、你能说说事务的几个特性是啥?有哪几种隔离级别?(下)
371+
- [58、你能说说事务的几个特性是啥?有哪几种隔离级别?(下)]()
372372

373-
59、你能说说MySQL数据库锁的实现原理吗?如果死锁了咋办?
373+
- [59、你能说说MySQL数据库锁的实现原理吗?如果死锁了咋办?]()
374374

375-
60、MySQL的SQL调优一般都有哪些手段?你们一般怎么做?
375+
- [60、MySQL的SQL调优一般都有哪些手段?你们一般怎么做?]()
376376

377-
61、聊聊Socket的工作原理?Socket跟TCP IP之间是啥关系?
377+
- [61、聊聊Socket的工作原理?Socket跟TCP IP之间是啥关系?]()
378378

379-
62、进程间是如何通信的?线程间又如何切换呢?
379+
- [62、进程间是如何通信的?线程间又如何切换呢?]()
380380

381-
63、你能聊聊BIO、NIO、AIO分别都是啥?有什么区别?(上)
381+
- [63、你能聊聊BIO、NIO、AIO分别都是啥?有什么区别?(上)]()
382382

383-
64、你能聊聊BIO、NIO、AIO分别都是啥?有什么区别?(下)
383+
- [64、你能聊聊BIO、NIO、AIO分别都是啥?有什么区别?(下)]()
384384

385385
### 线上生产实践
386386

387-
65、线上服务器CPU 100%了!该怎么排查、定位和解决?
387+
- [65、线上服务器CPU 100%了!该怎么排查、定位和解决?](/docs/03/65.md)
388388

389-
66、线上机器的一个进程用kill命令杀不死该怎么办?磁盘空间快满了又该怎么处理?
389+
- [66、线上机器的一个进程用kill命令杀不死该怎么办?磁盘空间快满了又该怎么处理?](/docs/03/66.md)
390390

391391
### JAVA并发(高阶部分)
392392

393393
后续深入硬件级讲解volatile、synchronized、CAS底层原理的说明
394394

395-
67、再谈原子性:Java规范规定所有变量写操作都是原子的
395+
- [67、再谈原子性:Java规范规定所有变量写操作都是原子的](/docs/03/67.md)
396396

397-
68、32位Java虚拟机中的long和double变量写操作为何不是原子的?
397+
- [68、32位Java虚拟机中的long和double变量写操作为何不是原子的?](/docs/03/68.md)
398398

399-
69、volatile原来还可以保证long和double变量写操作的原子性
399+
- [69、volatile原来还可以保证long和double变量写操作的原子性](/docs/03/69.md)
400400

401-
70、到底有哪些操作在Java规范中是不保证原子性的呢?
401+
- [70、到底有哪些操作在Java规范中是不保证原子性的呢?](/docs/03/70.md)
402402

403-
71、可见性涉及的底层硬件概念:寄存器、高速缓存、写缓冲器(上)
403+
- [71、可见性涉及的底层硬件概念:寄存器、高速缓存、写缓冲器(上)](/docs/03/71.md)
404404

405-
72、可见性涉及的底层硬件概念:寄存器、高速缓存、写缓冲器(下)
405+
- [72、可见性涉及的底层硬件概念:寄存器、高速缓存、写缓冲器(下)](/docs/03/72.md)
406406

407-
73、深入探秘有序性:Java程序运行过程中发生指令重排的几个地方
407+
- [73、深入探秘有序性:Java程序运行过程中发生指令重排的几个地方](/docs/03/73.md)
408408

409-
74、JIT编译器对创建对象的指令重排以及double check单例实践
409+
- [74、JIT编译器对创建对象的指令重排以及double check单例实践](/docs/03/74.md)
410410

411-
75、现代处理器为了提升性能的指令乱序和猜测执行的机制!
411+
- [75、现代处理器为了提升性能的指令乱序和猜测执行的机制!](/docs/03/75.md)
412412

413-
76、高速缓存和写缓冲器的内存重排序造成的视觉假象
413+
- [76、高速缓存和写缓冲器的内存重排序造成的视觉假象](/docs/03/76.md)
414414

415-
77、synchronized锁同时对原子性、可见性以及有序性的保证
415+
- [77、synchronized锁同时对原子性、可见性以及有序性的保证](/docs/03/77.md)
416416

417-
78、深入分析synchronized是如何通过加锁保证原子性的?
417+
- [78、深入分析synchronized是如何通过加锁保证原子性的?](/docs/03/78.md)
418418

419-
79、synchronized是如何使用内存屏障保证可见性和有序性的?
419+
- [79、synchronized是如何使用内存屏障保证可见性和有序性的?](/docs/03/79.md)
420420

421-
80、再看volatile关键字对原子性、可见性以及有序性的保证
421+
- [80、再看volatile关键字对原子性、可见性以及有序性的保证](/docs/03/80.md)
422422

423-
81、高速缓存的数据结构:拉链散列表、缓存条目以及地址解码(上)
423+
- [81、高速缓存的数据结构:拉链散列表、缓存条目以及地址解码(上)](/docs/03/81.md)
424424

425-
82、高速缓存的数据结构:拉链散列表、缓存条目以及地址解码(下)
425+
- [82、高速缓存的数据结构:拉链散列表、缓存条目以及地址解码(下)](/docs/03/82.md)
426426

427-
83、结合硬件级别的缓存数据结构深入分析缓存一致性协议(上)
427+
- [83、结合硬件级别的缓存数据结构深入分析缓存一致性协议(上)](/docs/03/83.md)
428428

429-
84、结合硬件级别的缓存数据结构深入分析缓存一致性协议(下)
429+
- [84、结合硬件级别的缓存数据结构深入分析缓存一致性协议(下)](/docs/03/84.md)
430430

431-
85、采用写缓冲器和无效队列优化MESI协议的实现性能
431+
- [85、采用写缓冲器和无效队列优化MESI协议的实现性能](/docs/03/85.md)
432432

433-
86、硬件层面的MESI协议为何会引发有序性和可见性的问题?
433+
- [86、硬件层面的MESI协议为何会引发有序性和可见性的问题?](/docs/03/86.md)
434434

435-
87、内存屏障在硬件层面的实现原理以及如何解决各种问题
435+
- [87、内存屏障在硬件层面的实现原理以及如何解决各种问题](/docs/03/87.md)
436436

437-
88、在复杂的硬件模型之上的Java内存模型是如何大幅简化的?
437+
- [88、在复杂的硬件模型之上的Java内存模型是如何大幅简化的?](/docs/03/88.md)
438438

439-
89、面试的时候如何从内存屏障、硬件层面的原理来震慑面试官
439+
- [89、面试的时候如何从内存屏障、硬件层面的原理来震慑面试官](/docs/03/89.md)
440440

441-
90、Java虚拟机对锁的优化:锁消除、锁粗化、偏向锁、自旋锁(上)
441+
- [90、Java虚拟机对锁的优化:锁消除、锁粗化、偏向锁、自旋锁(上)](/docs/03/90.md)
442442

443-
91、Java虚拟机对锁的优化:锁消除、锁粗化、偏向锁、自旋锁(下)
443+
- [91、Java虚拟机对锁的优化:锁消除、锁粗化、偏向锁、自旋锁(下) ](/docs/03/91.md)
444444

445445
### 系统安全性
446-
[92、再来看看CAS是如何基于MESI协议在底层硬件层面实现加锁的?](/docs/03/92.md)
446+
- [92、再来看看CAS是如何基于MESI协议在底层硬件层面实现加锁的?](/docs/03/92.md)
447447

448-
[93、为什么越来越多的公司面试的时候,喜欢问安全相关的连环炮?](/docs/03/93.md)
448+
- [93、为什么越来越多的公司面试的时候,喜欢问安全相关的连环炮?](/docs/03/93.md)
449449

450-
[94、能不能说说一般黑客常用的XSS网络攻击的原理是什么?](/docs/03/94.md)
450+
- [94、能不能说说一般黑客常用的XSS网络攻击的原理是什么?](/docs/03/94.md)
451451

452-
[95、能不能说说我们经常听到的SQL注入攻击背后的原理是什么?](/docs/03/95.md)
452+
- [95、能不能说说我们经常听到的SQL注入攻击背后的原理是什么?](/docs/03/95.md)
453453

454-
[96、听说过CSRF攻击吗?你知道他背后的原理是什么吗?](/docs/03/96.md)
454+
- [96、听说过CSRF攻击吗?你知道他背后的原理是什么吗?](/docs/03/96.md)
455455

456-
[97、如果你们的系统允许用户上传文件,可能会遭到什么样的黑客攻击?](/docs/03/97.md)
456+
- [97、如果你们的系统允许用户上传文件,可能会遭到什么样的黑客攻击?](/docs/03/97.md)
457457

458-
[98、让所有工程师闻声色变的DDoS攻击到底是什么东西?](/docs/03/98.md)
458+
- [98、让所有工程师闻声色变的DDoS攻击到底是什么东西?](/docs/03/98.md)
459459

460460
### 网络和IO
461-
[99、基于SYN Flood模式的DDoS攻击,背后的原理是什么呢?](/docs/03/99.md)
461+
- [99、基于SYN Flood模式的DDoS攻击,背后的原理是什么呢?](/docs/03/99.md)
462462

463-
[100、再来看看基于DNS Query Flood和HTTP Flood的DDoS攻击](/docs/03/100.md)
463+
- [100、再来看看基于DNS Query Flood和HTTP Flood的DDoS攻击](/docs/03/100.md)
464464

465-
[101、在分布式架构中,Zuul网关是如何防止网络攻击的?](/docs/03/101.md)
465+
- [101、在分布式架构中,Zuul网关是如何防止网络攻击的?](/docs/03/101.md)
466466

467-
[102、一个对技术有追求的面试官,是怎么深挖网络与IO的面试连环炮的?](/docs/03/102.md)
467+
- [102、一个对技术有追求的面试官,是怎么深挖网络与IO的面试连环炮的?](/docs/03/102.md)
468468

469-
[103、Netty的架构原理图能画一下吗,他是如何体现Reactor架构思想的?](/docs/03/103.md)
469+
- [103、Netty的架构原理图能画一下吗,他是如何体现Reactor架构思想的?](/docs/03/103.md)
470470

471-
[104、能说说你对堆外内存的理解吗?堆外内存的优势在哪里?](/docs/03/104.md)
471+
- [104、能说说你对堆外内存的理解吗?堆外内存的优势在哪里?](/docs/03/104.md)
472472

473-
[105、JDK是如何对堆外内存进行分配和回收的?会发生堆外内存溢出吗?](/docs/03/105.md)
473+
- [105、JDK是如何对堆外内存进行分配和回收的?会发生堆外内存溢出吗?](/docs/03/105.md)
474474

475-
[106、如果不使用零拷贝技术,普通的IO操作在OS层面是如何执行的?](/docs/03/106.md)
475+
- [106、如果不使用零拷贝技术,普通的IO操作在OS层面是如何执行的?](/docs/03/106.md)
476476

477-
[107、听说过mmap吗?内存映射技术为什么可以提升IO性能?](/docs/03/107.md)
477+
- [107、听说过mmap吗?内存映射技术为什么可以提升IO性能?](/docs/03/107.md)
478478

479-
[108、零拷贝技术到底是什么,他是如何提升IO性能的?](/docs/03/108.md)
479+
- [108、零拷贝技术到底是什么,他是如何提升IO性能的?](/docs/03/108.md)
480480

481481
### 分布式架构
482482

docs/03/65.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# 65、线上服务器CPU 100%了!该怎么排查、定位和解决?
2+
3+
## 1、面试题
4+
5+
线上服务器的cpu使用达到100%了,如何排查、定位和解决该问题?
6+
7+
8+
9+
## 2、面试官心里分析
10+
11+
说实话,这个问题是面试的时候,聊基础,最常问的一个问题,就是看看你有没有处理过高负载的线上问题场景。所以很多大公司考察你的基本功,肯定会问这个。其实这个你干过就是干过,掌握就是掌握,只要干过,所有人都是一样的步骤,没区别。
12+
13+
14+
15+
## 3、面试题剖析
16+
17+
其实核心思路,就是找到这台服务器上,是哪个进程的哪个线程的哪段代码,导致cpu 100了,主要就是考察你是否熟练运用一些线上的命令。
18+
19+
20+
21+
这里我可以给大家说一个我们线上的经验,就是之前有一个bug,是一个很年轻的同学写的,就是我们当时是定了异常日志是写到es里去的
22+
23+
24+
25+
```text
26+
public void log(String message) {
27+
try {
28+
29+
// 往es去写
30+
} catch(Exception e) {
31+
log(message);
32+
}
33+
}
34+
```
35+
36+
37+
38+
线上事故,es集群出了点问题,没法写,最后出现线上几十台机器,全部因为这一行代码,全体cpu 100%,卡死了
39+
40+
41+
42+
###(1)定位耗费cpu的进程
43+
44+
45+
46+
top -c,就可以显示进程列表,然后输入P,按照cpu使用率排序,你会看到类似下面的东西
47+
48+
| PID | USER |PR | NI | VIRT | RES |SHR | S | %CPU |%MEM | TIME+ | COMMAND |
49+
| ---- | ---- |----| ---- | ---- | ---- |---- | ----| ---- |---- | ---- | ---- |
50+
| 43987 | root |20 | 0 | 28.2g | 4.5g |68m | S | 99.0 |24.0 |44333.4 | java -Xms。。。|
51+
52+
53+
54+
55+
大概类似上面这样,能看到哪个进程,CPU负载最高,还有启动这个进程的命令,比如一般就是java啥啥的。
56+
57+
58+
59+
###(2)定位耗费cpu的线程
60+
61+
62+
63+
top -Hp 43987,就是输入那个进程id就好了,然后输入P,按照cpu使用率排序,你会看到类似下面的东西
64+
65+
![top命令,cpu使用率排序](images/65/01.png)
66+
67+
68+
69+
大概类似上面那样,你就可以看到这个进程里的哪个线程耗费cpu最高
70+
71+
72+
73+
###(3)定位哪段代码导致的cpu过高
74+
75+
76+
77+
printf “%x\n” 16872,把线程pid转换成16进制,比如41e8
78+
79+
80+
81+
jstack 43987 | grep ‘0x41e8’ -C5 --color
82+
83+
84+
85+
这个就是用jstack打印进程的堆栈信息,而且通过grep那个线程的16进制的pid,找到那个线程相关的东西,这个时候就可以在打印出的代码里,看到是哪个类的哪个方法导致的这个cpu 100%的问题

0 commit comments

Comments
 (0)