服务器高负载问题

问题分析

zx域名服务器(200.105)早盘负载过高,经查看,发现有如下两个大的因素:

频繁执行的脚本,耗用CPU较高

比如9:50左右,1分钟Load Average达到11:

1
2
3
4
5
root     16214  2.9  0.2  35456 22932 ?        S    09:44   0:05 php /var/www/html/cate/cron/gjzg/OriginalData/../autoScriptIndex.php Gjzg_Cron_OriginalData_QuoteData main
root 16219 11.2 3.3 287256 273956 ? S 09:44 0:19 php /var/www/html/cate/cron/gjzg/ProductData/../autoScriptIndex.php Gjzg_Cron_ProductData_RealtimeGenerator generateAllByRealtime
root 16392 38.6 0.1 29504 16360 ? R 09:45 0:43 php /var/www/html/cate/cron/gjzg/ActivityData/../autoScriptIndex.php Gjzg_Cron_OriginalData_MrdData getMrdData
root 16717 65.3 1.7 160536 147540 ? R 09:46 0:34 /usr/local/bin/php /var/www/activity/applications/level2/scripts/updateHKTenData.php
root 16701 65.7 1.5 142156 129032 ? R 09:46 0:34 /usr/local/bin/php /var/www/activity/applications/level2/scripts/updateLevel2CjmxData.php

每天的请求量比较大

以2015.12.08的日志为准:

1
2
3
4
5
6
7
8
cat  zx.access.log.1 |wc -l
3546963
cat activity.access.log.1 |wc -l
1857362
cat vis-free.access.log.1 |wc -l
22270
cat cate.access.log.1 |wc -l
618451

zx域名高达350多万的请求量,盘中9点至10点期间,并发数达到了148/s,这还不包括其他几个域名。

对zx域名的请求进行分析:
请求量排名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
php statFlow.php -f /usr/local/nginx/logs/zx.access.log.1 -t /home/zhouchangju/statFlow/ -s n -p
cost 19.467571973801

总流量 请求数 平均响应大小 URI
354652367 1488668 239 /interpretation/index/hasinfo
3487366765 790493 4412 /event/harden/stockhistory
413868872 268667 1541 /event/harden/stockreason
856088523 267299 3203 /tracesource/financial/index
5327568 218959 25 /tracesource/js/showtitle
318623420 124797 2554 /event/concept/trace
194268107 66014 2943 /event/api/search
1185320843 60949 19448 /event/api/getharden
144998194 35403 4096 /concept/index/detail
26170207 22001 1190 /report/recommend/cate

流量排名:

1
2
3
4
5
6
7
8
9
10
11
12
13
php statFlow.php -f /usr/local/nginx/logs/zx.access.log.1 -t /home/zhouchangju/statFlow/ -s t

总流量 请求数 平均响应大小 URI
3487366765 790493 4412 /event/harden/stockhistory
1185320843 60949 19448 /event/api/getharden
856088523 267299 3203 /tracesource/financial/index
416551864 9463 44020 /report/ybxt/options
413868872 268667 1541 /event/harden/stockreason
354652367 1488668 239 /interpretation/index/hasinfo
318623420 124797 2554 /event/concept/trace
194268107 66014 2943 /event/api/search
189154709 11310 16725 /event/api/getcase
144998194 35403 4096 /concept/index/detail

平均响应大小:

1
2
3
4
5
6
7
8
9
10
11
12
php statFlow.php -f /usr/local/nginx/logs/zx.access.log.1 -t /home/zhouchangju/statFlow/ -s a
总流量 请求数 平均响应大小 URI
416551864 9463 44020 /report/ybxt/options
76553537 3650 20974 /report/ybxt/syscolumn
1185320843 60949 19448 /event/api/getharden
3982311 214 18609 /shhk/js/highstock
189154709 11310 16725 /event/api/getcase
150592 13 11584 /report/images/ysc
283266 25 11331 /news/page/day
30317 3 10106 /news/page/week
1357013 137 9906 /shhk/cache/hgt
163195 17 9600 /news/page/hour

解决方案

CPU占用过高问题

1.和产品经理确认下脚本的执行频率,目前是每分钟执行一次,是否可以延长执行间隔
2.排查脚本性能,看看能否降低资源消耗

请求量过大问题

1
2
3
4
5
6
7
8
9
10
354652367	1488668	239	/interpretation/index/hasinfo
功能:94页面判断行业有没有溯源信息
问题:这个请求是客户端直接访问我们这边,发起请求的是热门页面,每天访问量较大
优化:
1.我们这边加上squid缓存(14:30)
2.今后改为走资讯服务器
cat zx.access.log|grep "/interpretation/index/hasinfo"|awk '{print $7}'|wc -l
885694
cat zx.access.log|grep "/interpretation/index/hasinfo"|awk '{print $7}'|grep -E "souniu/$"|wc -l
546751
1
2
3
4
5
6
7
8
9
10
11
3487366765	790493	4412	/event/harden/stockhistory
功能:涨停分析页面,查询个股的历史涨停资讯
问题:
1.有超过10%的请求,股票代码没有匹配出来,url中是%256
2.功能使用者较多
优化:
1.联系客户端同事排查股票代码匹配问题
2.我们这边加上squid缓存(14:30)

cat zx.access.log.1|grep "/event/harden/stockhistory/code/%256/"|awk '{print $7}'|wc -l
82865
1
2
3
4
5
6
413868872	268667	1541	/event/harden/stockreason
功能:涨停分析页面,查询个股的涨停原因
问题:
1.功能使用者较多
优化:
1.我们这边加上squid缓存(14:30)
1
2
3
4
5
6
856088523	267299	3203	/tracesource/financial/index
功能:财务数据标签
问题:
1.功能使用者较多,很容易触发tip页面
优化:
1.我们这边加上squid缓存
1
2
3
4
5327568	218959	25	/tracesource/js/showtitle.js
功能:财务数据标签上引用的一个js
问题:没有上传资源平台
优化:上传资源平台
1
2
3
4
5
6
1185320843	60949	19448	/event/api/getharden
功能:涨停分析,请求涨停股列表
问题:
1.功能使用者较多,访问量较大;而且一旦行情好了,返回的股票信息也会增加
优化:
1.我们这边加上squid缓存

效果

以12.08和12.09两天,14:30-15:30区间段的请求作为测试样本:

数据项 12.08 12.09 12.09/12.08
总请求数 258728 214562 83%
/interpretation/index/hasinfo 140167 120218 86%
/event/harden/stockhistory 25809 2771 11%
/event/harden/stockreason 9789 2338 24%

这几个请求,现在做的处理都是添加squid缓存,/interpretation/index/hasinfo的请求方式是POST,无法被squid缓存,因此没有效果,需要联系客户端进行请求机制上的优化。

其他几个请求,今天数据较少,需要等明天晚上再观察一下。