服务器高负载问题
问题分析
zx域名服务器(200.105)早盘负载过高,经查看,发现有如下两个大的因素:
频繁执行的脚本,耗用CPU较高
比如9:50左右,1分钟Load Average达到11:
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的日志为准:
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域名的请求进行分析: 请求量排名:
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
流量排名:
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
平均响应大小:
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.排查脚本性能,看看能否降低资源消耗
请求量过大问题
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
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
413868872 268667 1541 /event/harden/stockreason
功能:涨停分析页面,查询个股的涨停原因
问题:
1.功能使用者较多
优化:
1.我们这边加上squid缓存(14:30)
856088523 267299 3203 /tracesource/financial/index
功能:财务数据标签
问题:
1.功能使用者较多,很容易触发tip页面
优化:
1.我们这边加上squid缓存
5327568 218959 25 /tracesource/js/showtitle.js
功能:财务数据标签上引用的一个js
问题:没有上传资源平台
优化:上传资源平台
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缓存,因此没有效果,需要联系客户端进行请求机制上的优化。
其他几个请求,今天数据较少,需要等明天晚上再观察一下。