经常会有同事谈起负载,同时linux系统很多命令有load的输出,那么负载到底是什么呢?
记住:同事说的负载指的就是linux下load值。
关于负载:
负载是什么?
负载表示在cpu里面正在运行的进程数量。
负载如何计算?
用uptime会得到过去1分钟,5分钟,15分钟的load average。
用vmstat能够得到过去1秒的load average,r项的输出就是过去一秒的平均负载,因为仅采样一次,也是过去一秒的负载。
uptime可以这样理解:1分钟内使用vmstat采样60次,60次r值相加,再除以60,就是load average。
关于进程阻塞:
在web应用中,用户的一次请求通常必须在很短的时间内执行结束,如若不然,想想一种极端情形:每来一个请求均不释放资源(CPU,进程数,内存,连接数等),请求数很快就能达到系统设置的连接上限,这样下一个请求就必须等待某个请求释放资源(连接数),而假设被CPU调度的请求永久占用而不释放资源,那么意味其它所有的请求均无法调度而造成页面访问失效,流失用户也就水到渠成啦。
进程阻塞有可能:
CPU密集:死循环;
内存密集:内存小导致换入换出很频繁;
I/O密集:写入读取数据量过大导致disk很忙;
外部服务:数据库(执行时间过长导致数据库连接或执行阻塞),外部服务本身失效无限尝试,web机到外部服务提供机的网络中断;
具体是由于什么原因导致的阻塞还需要根据系统日志和业务日志共同排查,缺一不可。