目录
服务器反应慢
线上服务器cup飙升,如果定位Java代码?
服务器变慢如何诊断处理?
线上接口负载剧增,快扛不住了,解决方法是什么?
秒杀设计
从全局角度如何设计一个秒杀系统
秒杀活动里遇到的问题
如何设计百万并发场景里的枪优惠券
如何设计春节抢红包的金额的算法。
如果设计订单超时自动取消
时间轮
服务器反应慢
线上服务器cup飙升,如果定位Java代码?
使用top命令找到CPU高的进程
使用SP-MP命令找到进程下CPU高的线程ID
printf命令把tid转换16进制数
使用jstack命令输出线程运行状态日志信息。
服务器变慢如何诊断处理?
CPU利用率
CPU利用率过高,说明服务器当前处理的指令比较多,当cup处理不过来的时候,指令执行效率就会下降,用户感觉程序处理变慢了。解决方法查看线上服务器cup飙升,如果定位Java代码。
CPU利用率过低,说明程序使用资源过低,可以增加线程数量提升程序性能。
磁盘io效率
程序运行过程里会直接或间接磁盘io操作,例如程序直接读写磁盘文件,或者依赖第三方组件对磁盘进程持久化存储,此时磁盘io效率就会对程序产生影响。
使用iostat命令查看,如果磁盘负载较高,可以针对性优化。例如,使用缓存减少io次数,使用顺序写代替随机写,减少寻址开销,使用mmap,减少内存拷贝次数
内存瓶颈
内存是一块临时存储数据的组件,所有CPU指令都需要在内存里读写,内存的合理使用减少程序和磁盘io的频率,减少网络io频率,提升io性能。
jvm对内存合理分配能够避免频繁的GC,当内存使用率高的时候,可以使用dump命令检查jvm内存,使用mat工具分析找出大对象,排查是否存在内存泄漏。如果堆内对象正常,可能是堆外内存被大量使用,这个时候使用pmap检查进程内存分配情况,如果CPU和内存使用正常,这时使用jstat查看cg日志,分析用户线程暂停时间,gc次数等指标.
线上接口负载剧增,快扛不住了,解决方法是什么?
增加缓存。因为增加缓存是解决系统性能问题的最快速,最高效的方案,他能够快速提升系统的吞吐量,但是需要修改源代码。零时的解决方案是增加节点,将程序部署到新的节点上,在流量入口增加限流和分发,但是增加节点会增加成本。
当接口负载扛不住的时候,可以优先增加缓存缓解负载压力,例如将读取频繁的数据写到缓冲区里,将动态页面静态化。如果压力还是很大,再增加限流策略,例如消息队列,如果压力过大,在考虑增加服务节点。
秒杀设计
从全局角度如何设计一个秒杀系统
秒杀是电商系统常见业务模式,为了吸引用户刺激消费而设计的一种促销活动。例如整点秒杀,单个商品秒杀。
特点,
1.瞬时流量大,秒杀活动结束后流量消失,所以不能用堆机器的方式提高QPS成本太高。QPS,quer
评论前必须登录!
注册