这章是本书的最后一个章节,主要讲述了一个生产者消费者模型和一个线上问题定位的方法

生产者和消费者模型

  • 开发过程中要多思考,是否可以使用模型解决问题
  • 线程池也是一种生产者消费者模型

线上问题定位

top命令

  1. 初识top命令
    • -COMMAND:我们要关注java的
    • %CPU:是所有CPU核的利用百分比相加的
  2. 输入top命令->按 “1”
    • 会显示所有CPU的核数
    • image.png
  3. 输入top命令->按“H”

image.png

问题定位

  1. 某个线程的CPU一直100%
    1. 可能的原因
      1. 某个程序中有死循环
      2. 可能是GC造成
    2. 定位方式
      1. 记住PID
      2. jstat命令查看一下GC情况(是不是老年代满了,引发FullGC)

image.png

  1. 3. 通过jstack命令将线程Dump下来,然后找到相应的线程号(printf “%x\n PID转换)

image.png

性能检测

  • 一个压缩小程序,部署在10台机器上,每个机器100线程
  • 应用服务部署在一台服务器上
  1. 查看多少台机器连接到本机的 xxx端口

image.png

  1. 查看多少个Mysql数据库连接

image.png

  1. 查看网络流量

image.png

  1. 查看系统平均负载

image.png

  1. 查看系统内存情况

image.png

  1. 查看CPU利用率

image.png

  1. 统计线程数量

image.png

异步任务池

Java的线程池的缺陷:

  • 任务丢入线程池,此时程序重启,会丢失任务
  • 只能处理本机的任务
    • 思路

image.png