第四章 系统的稳定性
常用的在线日志分析命令的使用和日志分析脚本的编写,如cat、grep、wc、less等命令的使用,以及awk、shell脚本的编写
如何及逆行集群的监控,包括监控指标的定义、心跳检测、容量评估等
如何保障高并发系统的稳定运行,如采用流量控制、依赖管理、服务分级、开关等策略,以及如何设计高并发系统。
如何优化应用的性能,包括前端优化、java程序优化、数据库查询优化等。
如何进行java应用故障的在线排查,包括一系列排查工具的使用,以及一些实际案例的介绍等。
4.1 在线日志分析
4.1.1 日志分析常用命令
1.查看文件的内容:cat 命令 加上-n参数,可以显示行号
2.分页显示文件:more/less less access.log 使用/GET 查找字符串GET,并且高亮显示
3.显示文件尾 :tail -n2 access.log 显示最后2行
4.显示文件头:head 参数-n 指定显示前几行
5.内容排序:sort 对数据排序 默认是按照字符序排序的,-n参数是从小到大排序,-r参数是逆序排列,
-k参数来指定排序的列,-t参数指定列的分隔符
6.字符统计:wc 来统计文件中的字符数、行数、字数并输出统计结果。
7.查看重复出现的行:unip用来显示文件中行重复的次数,或者显示仅出现一次的行,以及仅仅显示重复
出现的行,并且去重。
8.字符串查找:使用grep来查找文件中符合条件的字符串
9.文件查找 :find
10.表达式求值:expr命令
11.归档文件,tar命令
12.URL访问工具 curl:它支持HTTP、HTTPS、FTP、FTPS、Telnet等多种协议,常被用来抓取网页和监控Web服务器状态。
13.查看请求访问量 cat access.log |cut -f1 -d ” “ |sort |unip -c | sort -k 1 -n -r |head -10
14.查看最耗时的页面 cat access.log|sort -k 2 -n -r |head -10
15.统计404请求的占比
4.1.2 日志分析脚本
1.sed编辑器 : 流编辑器
2.awk程序:它提供一种编程语言而不仅仅是一组文本编辑的命令,在编程语言的内部,可以定义保存数据的变量,使用算术和字符串操作函数对数据进行运算,支持结构化编程概念,能够使用if和循环语句等。
3.shell 脚本
4.2 集群监控
4.2.1 监控指标
1.load :系统的load被定义为特定时间间隔内运行队列中的平均线程数
使用uptime查看系统的load ,load average后面的三个值表示1、5、15分钟内系统的load值
2.CPU利用率:top|grep cpu
3.磁盘剩余空间:df -h/du -d 1 -h 路径
4.网络traffic:sar命令可以查看系统的网络状况
5.磁盘I/O:查看系统的I/O状况:iostat -d -k
6.内存使用:free -m 查看系统内存使用情况
7.gps:每秒查询数,
8.rt(response time)请求的响应时间,
9.GC:minor gc 是发生在新生代的gc。而major gc 称为full gc 是发生在老年代的gc
4.3 流量控制
4.3.1 流量控制实施 :1.最简单、最直接的方式将这超载的这部分流量丢弃,不进行任何处理直接返回,基于java的信号量机制(Semaphore)
2.另一种方式是通过分布式消息队列来将用户的请求异步化,分布式请求处理队列,提交成功便视为成功处理,然后系统返回。通过java实现的基于ActiveMQ的请求提交
4.3.3 高并发设计
1.操作原子性:JDK5以后提供Atomic Class 支持CAS等一系列院子操作,来帮助多线程设计,通过AtomicInteger的compareAndSet方法,只有当假定的count值与实际的count值相同时,才将加1后的值赋值回去,避免发生多线程环境下变量值被修改而导致数据紊乱。
2.一个线程获得行锁以后,其他并发线程就需要等待它处理完成之后才释放锁,这样系统就无法利用多线程并发执行的优势,那么可以将一行库存拆分成多行,
select sum(库存) from商品表 -----》查库存
update 商品表 set 库存=库存-1 where id = 1000x and sum(库存) > 0 ----》减库存
4.4.2 性能测试工具
1.ab 全称apacheBench 是apache基金会提供的一款专门用来对HTTP服务器进行新能测试的小工具,可以模拟多个并发请求来对服务器进行压力测试
2.Apache Jmeter 是Apache提供的另一个开源性能测试工具,支持多种协议 HTTP\SOAP\FTP\TCP\SMTP\POP3等
3.HP LoadRunner是惠普的一款功能极为强大的商业付费性能测试工具,它通过模拟大量实际用户的操作行为和实时性能检测的方式,支持最为广泛的协议标准,适用各种体系架构,
4.反向代理引流:
5.TCPCopy:请求复制工具,将在线请求复制到测试机器,模拟真实环境
4.4.3 性能优化措施
1.前端性能优化:a。页面的http请求数量。b。是否使用CDN网络。c。是否使用压缩
2.java程序优化:a。单例。b。Future模式:假设一个任务执行需要花费一些时间,为了省去不必要的等待时间,可以先获取一个”“提货单”即future,然后继续处理别的任务,直到“货物”打到,即任务执行完成得到的结果,通过future对象得到返回值。FutureTask实现Future和Runnable接口,FutureTask开始后,loadData()执行时间可能较长,因此可以先处理其他事情,再通过future.get()来获取结果,如果还没执行完成,则此时线程会阻塞等待。
c。线程池。
3.减少上下文切换
4.降低锁竞争
5.压缩
6.结果缓存
7.数据库查询性能优化:合理使用索引、使用查询缓存、使用搜索引擎(在分布式环境下,由于分布在多个库中,且表也进行切分,这时候就需要搭建搜索引擎,将需要进行查询和展现的列通过一定的规则都建到索引当中,已提供复杂的跨表查询与分组操作)、key-value数据库
8.GC优化
9.硬件提升性能
4.5 java 应用故障排查
4.5.1 常用工具:jps、jstat、jinfo、jstack、jmap、BTrace(java程序跟踪工具)、JConsole、MemoryAnalyzer、VisualVM(是一款功能十分强大的ALL-in-One的工具,涵盖了JVM内存消耗监视,性能分析,线程,以及堆栈存储分析,垃圾回收监视等,包括对BTrace的界面操作使用)