压力测试条件
1.并发用户数
2.总请求数(也有按照连续请求时间)
3.请求资源描述(一个简单查询,复杂业务操作等)
最大并发数:服务器和用户双方的最大收益,服务器需要支持高并发数和及高吞吐率,用户需要较少的时间得到响应。
文件描述符:标明每一个被进程所打开的文件和socket数目
ulimit -n //获取
1024
ulimit - n 2048 //设置
实际并发数大于文件描述符数
如果是小文件请求 那么很快处理释放描述符 影响不大
否则如果是大文件请求耗时很长 那么用户等待时间就会很长 这个时候应该设置服务的最大并发数小于理论上的最大连接数。
用户平均请求等待时间:衡量服务器在一定的并发用户数的情况下 对于单个用户的服务质量。
服务器平均请求处理时间:衡量服务器的整体服务质量 是吞吐率的倒数。
结论:
随着并发数的增加服务器的资源不断充分利用,吞吐率不断提高,当超过一定值 吞吐率开始走下坡路。
单个请求处理时间先降低 后一直增加。
请求等待时间 一直增加。。。。
cpu 多执行流好处:
1.时间的轮转 加速响应
2.cpu计算和io(速度慢)操作重叠
进程优先级:
通过 top 查看PR列
表示的时钟个数 linux上一个时钟10ms pr为15表示时间片为150ms
系统负载:
s-colin:/ # cat /proc/loadavg
1.63 0.48 0.21 10/200 17145
10/200表示运行队列中有10个进程 进程总数为200
17145 最后创建的进程ID
1.63 0.48 0.21 1分钟 5分钟 15分钟的计算出来的系统负载
负载计算方法:单位时间内允许队列中就绪等待的进程数的平均值。
如果值为0.00 就表示就绪了 就可以执行了 不需要等待。
运行一个死循环 会导致load马上上去 这个时候占用大量时间片 其他的进程就绪还得等待 时间片的切换。
进程切换:
每个进程都拥有自己的内存空间,但是都只能共享cpu寄存器
进程挂起的本质:将cpu寄存器数据拿出来暂存到内核态堆栈中,而进程恢复的本质就是将数据重新载入cpu寄存器,这段载入和移出称为硬件上下文
通过linux监视工具 Nmon
当服务器不提供服务:ContextSwitch:28.4
IO模型:
等待在:建立连接-》发送请求-》网络传输-》接收缓冲区复制到进程地址空间
同步阻塞IO
同步非阻塞IO:立马返回 结合反复轮询来尝试数据是否就绪,防止进程被阻塞,最大的好处便在于可以在一个进程里同时处理多个IO操作。
多路IO就绪通知:
内存映射:内存和磁盘进行管理 操作硬盘和操作内存一样。
服务器的并发策略: