Performance

基础 #

性能指标
    latency
    throughput
    qps = throughput / latency
性能分析
    bottle-nect(first-principle)
资源
    CPU和GPU
    内存
    磁盘
    网络
    能源
逻辑资源
    fds(文件描述符)
    sockets
    内核对象: locks
    inodes(磁盘索引节点)
    transactions
    ip addresses
    ports
    random numbers(分布式随机数)
容量
    2000前   尽量少
    200~    不到机型限制
    2017    尽量把机器用满
    以后     metrics分离, 单独规划

计算 #

cpu
gpu

存储 #

类型 时间 描述
L1 cache 0.5ns
branch mispredict(分支、转移) 5ns
L2 cache 7ns 14x L1 cache
Mutex lock/unlock 25ns
Main memory 100ns 20x L2 cache, 200x L1 cache
1k字节压缩Zippy 3,000ns = 3us
在1Gbps网络上发送1k字节 10,000ns = 10us
SSD随机读4k 150,000ns = 150us 1GB/秒
内存顺序读1MB 250,000ns = 250us
同一数据中心往返 500,000ns = 500us
SSD顺序读1MB 1,000,000ns = 1000us = 1ms 1GB/秒, 4x 内存
磁盘搜索 10,000,000ns = 10,000us = 10ms 20x 数据中心往返
磁盘顺序读1MB 20,000,000ns = 20,000us = 20ms 80x 内存, 20x SSD
发包: 美国 -> 荷兰 -> 加拿大 150,000,000ns = 150,000us = 150ms

传输 #

带宽
    热门并发1.5倍到2倍购买
方式
    HDD
    SSD
    ethernet
    南桥、北桥芯片

并发 #

并发
    jetty 2k-3k
    nginx 1w
    lvs 100w
    f5 + lvs 400w-800w
    mysql 1k
    oracle 1.5k-2k
    tomcat 1k

1并发/10在线用户/100注册用户

1用户/20pv

访问时段
    8点 - 23点
    最大访问量为平均值1.7倍

每个html页面20k, 40k/css, 50k/js. css与js会缓存

数据库
    mongodb
        查询
            4w++/5s                # aurora测

一个进程13M左右
    10g内存787多并发(最早的apache)
一个线程2M内存
    10g内存5120并发

cpu一级缓存取数据: 3个时钟周期(tick)
cpu二级缓存取数据: 14 tick
内存取数据: 250 tick
磁盘取数据: 4100w tick
网络取数据: 24000w tick

负载均衡器
    # 并发在100w - 800w
    深信服
    F5

性能调优 #

影响因素
    内因
        项目设计、实现
        资源加载
        配置
    外因
        网络
        流量
        架构
        服务器配置
步骤
    分析用户习性          # 功能路径,热点
    内存瓶颈
        内部
            托管资源
                对象分配回收  # session、缓存、对象池等
            非托管资源
                数据库、文件、线程
        外部
            进程竞争
    cpu瓶颈
        cpu密集业务
            加密、解密,垃圾回收,解压缩,算术运算,过度编译
    缓存分析
        浏览器缓存       # 资源文件,过期
        代理缓存        # 地域、安全、更新
        内核缓存、IIS缓存
        数据缓存
    资源等待分析
        数据库等待
        线程锁定
        磁盘读写
    数据库瓶颈(找数据库笔记)
    http优化
        减小页面
        只传必要数据
        资源加载
架构
    去单点
    服务化
    优质业务专门机器
    广播改订阅
    换语言/框架重构

案例 #

o-> 小米论坛
    pv 2000w
    热门并发300
    20k/页面
    300k/图片(未压缩)
    70k/无图帖子
    500k-3M/有图帖子

    动态服务器最小带宽: 48Mbps
    静态服务器最小带宽: 1440Mbps
    实际购买带宽: 800M
    带宽费用: 8.7w/month

o-> 糗事百科
    pv 1000w
    热门并发150
    10k/页面
    70k/图
    4图/页
    90k-400k/综合页
    动态服务器带宽: 12Mbps
    静态服务器带宽: 336Mbps

工具数据 #

nodejs
    虚拟机数据
        mem: 512m
        mem: 66.7%
        cpu: 1%
    执行
        5秒循环mongo数据: 17w条
    状况
        程序完全阻塞

    并发: 300
    qps: 140
    8核全满

    2-4G 内存 3000万并发
    5w socket                        # 系统最高65535个端口,支持这么多连接
    已实现成就
        ruby迁移到node.js有10倍的性能提升,特定情况下20倍性能提升
        5w并发/min


redis
    200并发, 每次3ms, 37000次/s

mysql
    最多3.5w写入/s