CPU有两头怕
1)怕CPU占用率高
2)怕CPU占用率低
重点解释一下为什么怕CPU低。有时候,业务压力冲上来了,但都被挡在外面,或者堆在队列了,而此时看CPU利用率却很低,也就是有CPU但没有用上。对于ETL来说,往往是晚上做,你这里着急明天早上8点开门,它却迟迟处理不完,CPU利用率很低,你着急不着急?
这种情况有好多原因。
1)并发线程数太少。(这一点,楼上的同学也提到了)
并发数应该开多少呢? 假如 你的应用线程是全力干活的线程,没有什么sleep、等IO之类的事情,也就是说,一个线程可以把一个物理CPU thread吃的慢慢的。那么你的最大并发线程,可以设为略小于服务器的逻辑CPU数量。也就是CPU core * SMT。如果你是虚拟化powervm环境,逻辑CPU=VP*SMT,但虚拟化环境,需要额外注意,如果你要保持高性能,那么建议略小于EC*SMT即可。
2)虚拟化平台的参数配置有问题
比如,某个LPAR,EC=0.5,VP=5,那么很可能,压力来了之后,CPU利用率也上不去,报文严重堆积。因为大部分实际,多花在hypervisor的调度上,以及CPU的cache命中失败,去内存找数据取了。
关于这方面的原理,在我的文章中有提到
3)其他各类参数限制导致应用能力被约束,尤其以数据库为甚。
比如应用连接Oracle数据库服务器的JDBC连接数太少,数据库的process太少等等,导致应用在等待数据库。如果单讲数据库的话,以Oracle为例,可以看看awr的top等待事件。
比如log switch等待时间长,就调整redo日志组数和日志大小
比如索引等待时间长,可以调整为索引分区
比如rego日志sync等待时间长,调整存储的能力。
收起