尚硅谷_宋红康_案例7:日均百万订单系统JVM参数设置.png
如果要求响应时间控制在100ms如何实现?
可以通过压测的方式去调整jvm的空间,尽量去减少延迟时间

小结

12306遭遇春节大规模抢票如何支撑?

12306号称是国内并发量最大的秒杀网站,并发量达到百万级别。

普通电商订单—> 下单 —> 订单系统(IO)减库存 —-> 等待用户付款

12306一种可能的模型:下单 —> 减库存和订单(redis、kafka)同时异步进行 —> 等付款
但减库存最后还会把压力压到一台服务器上。如何?
用分布式本地库存+单独服务器做库存均衡!

问题一:有一个50万PV的资料类网站(从磁盘提取文档到内存)原服务器是32位的,1.5G的堆,用户反馈网站比较缓慢。因此公司决定升级,新的服务器为64位,16G的堆内存,结果用户反馈卡顿十分严重,反而比以前效率更低了!

1. 为什么原网站慢?
频繁的GC,STW时间比较长,响应时间慢!

2. 为什么会更卡顿?
内存空间越大,FGC时间更长,延迟时间更长

3. 咋办?
> 垃圾回收器:parallel GC ; ParNew + CMS ; G1
> 配置GC参数:-XX:MaxGCPauseMillis 、 -XX:ConcGCThreads
> 根据log日志、dump文件分析,优化内存空间的比例
jstat jinfo jstack jmap


问题二:系统CPU经常100%,如何调优?(面试高频)
CPU100%的话,一定是有线程占用系统资源。具体步骤前面已经讲过。
1、首先查看java进程ID
2、根据进程 ID 检查当前使用异常线程的pid
3、把线程pid变为16进制如 31695 -> 7bcf 然后得到0x7bcf
4、jstack 进程的pid | grep -A20 0x7bcf 得到相关进程的代码 (鉴于我们当前代码量比较小,线程也比较少,所以我们就把所有的信息全部导出来)
5、ps aux | grep java 查看到当前java进程使用cpu、内存、磁盘的情况获取使用量异常的进程
6、top -Hp 进程pid 检查当前使用异常线程的pid
7、把线程pid变为16进制如 31695 - 》 7bcf 然后得到0x7bcf
8、jstack 进程的pid | grep -A20 0x7bcf 得到相关进程的代码

注意: 工作中有时候是工作线程100%占用了CPU,还有可能是垃圾回收线程占用了100%

问题三:系统内存飙高,如何查找问题?

一方面:jmap -heap 、jstat 、… ; gc日志情况
另一方面:dump文件分析


问题四:如何监控JVM
> 命令行工具
> 图形化界面工具