开始用的阿里云的 512M 云主机,我程序在进行查询时,CPU占用100%达4,5分钟。加上阿里云只能买固定宽带,不适合流量忽大忽小的情况。于是百度接着找,看到一个人推荐 linkcloud,看了下,可以按需购买宽带,不用非的买固定宽带,这个灵活性很好。买了一个 1 核CPU,1G 内存的,装centos系统。
程序移过去后,查询的时候,CPU仍然占100%
shell下,执行mysql,然后
show processlist;
看到我的查询命令,几个表联合查询,因为没有用到条件,执行全表扫描,显示 300 秒在执行 copying to tmp。云主机花了300秒在复制数据到临时表。
又用 top 命令测试,发现 mysqld 进程占100% CPU,但内存才占 2.5%, 说明内存是充足的,那几个表的大小加起来才50M不到。那问题就在磁盘IO和CPU了。
dd if=/dev/zero bs=1024 count=1000000 of=/1Gb.file 显示写入速度有 150M/s (if 是来源 of 是目标)
dd if=/1Gb.file of=/dev/null bs=8k 显示读取速度有 240M/s
dd if=/1Gb.file of=/1Gb2.file bs=64k (复制文件,边读边写, 显示有75M/s)
磁盘速度不慢啊。
用 iostat -x 2 查看,然后执行查询,开始的时候,显示有磁盘IO,过了10多秒,没有磁盘IO了,但是 %user CPU占用仍然接近100%。说明CPU才是真正的瓶颈。
在国外的vps上运行程序,512M的。都没出现这个情况。国内的云主机又比国外的贵,资源还给的少。咳