一次网站性能排查实录

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

接到一个求助电话,说是有个阿里云上的服务器,有性能瓶颈,但又没有什么具体的数据,只是说偶尔客户端有少数连接不上,或者连接会突然中断。我的天,最怕这种状况了,还得自己去找问题表现是什么,再去找什么原因所致。----懒人可直接点此处,不必辛苦看文字


因为是线上的环境,得分两步进行。先检查,看系统或者应用存在什么明显的印迹,分析原因和处理方法;协商什么时候可以处理,处理风险是什么。


怕影响用户体验,白天还不让搞。月黑风高,家里有没暖气啊(用一块闲置显卡挖矿取暖),没办法,只好熬夜苦战一番。


通过了解,该云主机带宽12M,其他方面的配置,我自己登录看就好。

既然收到带宽,就先看它了,看了好一阵,也不到10M嘛。

blob.png

其他资源配置为:

(1)cpu 8core

(2)内存 16G

(3)硬盘 50G系统加120G外挂空间。

其中系统负载一直稳定不高,IO也还过得去,系统日志也无明显的报错信息。查看网络状态,TIME_WAIT相对于ESTABLESHED来说,高了不少(因为文章为事后所写,无法再重现了)。根据经验,大致可以判断引起TIME_OUT高的原因主要有两种:一种是系统参数(sysctl.conf)设置,另一种就是应用服务配置。前一种比较好办,乘访问量少的时候,偷偷的修改/etc/sysctl.conf(修改前一定要记得备份哟),然后重载 sysctl -p,再执行netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}',发现TIME_OUT的数量并没有减少多少。由此可知,最大的可能就在系统上边的应用。


当然,作为系统管理员,不可能啥都去问人家,你上边安装了什么,都在啥目录啊,程序之间都什么关联?只要有系统登录权限,哪能难住咱们呢!敲ps auxww |more 加一点点耐心,能查个八九不离十。不就是一个nginx + php + mysql 嘛,挨个检查,应该能查到问题所在。这一回车,好多php进程呢,屏幕翻滚了好几屏。心想,没那么多连接数,跑那么多进程干啥呢?做过过滤,数一下php进程数,好家伙301个。


我有个习惯,喜欢从后边往前边查。于是就从数据库开查,show processlist,没线程连接上来,奇怪了啊。还以为自己眼花,又执行了好几遍,还是这样。检查mysql错误日志,数据目录,毫无所获,难道不是用这个mysql?吃个橘子压压惊,查看网络状态,看它连接到哪里去了。

blob.png

居然没用本机的mysql(不知道装这个干啥),赶紧电话问,说是购买了阿里云的mysql服务,好吧,看来这个就不用查了。


接下来,该看看nginx了。这一查,还真找到几个不顺眼的地方。按照我的习惯,如果系统上要运行多个web站点,一般都会用明确包含的方式对配置文件进行书写,这样做的好处是,看到主配置文件,就知道有多少站点;而且做维护的时候,如果某些站点要临时变更或者变更后整个web服务启动不了,就可以通过注释掉相关的那行包含(include)语句。最不喜欢谁用什么 include *.conf,你写起来省事,可是后边维护就不那么省事。

blob.png

没办法,我认了。再进具体包含文件的目录,随机打开一个,截取一段如下:

blob.png

包含里边嵌套包含,那好,我们就看看它这个包含里边写的啥:

[root@iZm5e64s4c3fznr1kxv1qaZ conf]# more enable-php.conf 

        location ~ [^/]\.php(/|$)

        {

            try_files $uri =404;

            fastcgi_pass  unix:/tmp/php-cgi.sock;

            fastcgi_index index.php;

            include fastcgi.conf

又有一个嵌套,狂晕啊!继续看这个fastcgi.conf,就是一个fastsgi_params文件的副本。

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;


fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REQUEST_SCHEME     $scheme;

fastcgi_param  HTTPS              $https if_not_empty;


fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;


fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;


# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

各位看官,再往下看这个文件,又来了个fastcgi_pass 127.0.0.1 ,是要用什么方式关联php呢?前边那个include指定的"fastcgi_pass  unix:/tmp/php-cgi.sock;" 后边又跟这么一个是什么用意?

blob.png

看到没有,这个fastcgi_pass 127.0.0.1 根本没起作用啊,可能是从网上找的,胡乱粘贴一通。另外,也从php那边印证一下,确认服务是否有tcp 9000端口处于监听状态。

[root@iZm5e64s4c3fznr1kxv1qaZ ~]# netstat -anp|grep 9000|wc -l|grep -v grep

0

打开其它站点配置文件,全是这个搞法。得统一做规范,方便自己也是方便他人嘛!不过乱归乱,还是能正常运行,nginx本身也不会对性能产生太大的影响。由这里可以推断,php估计也是胡乱从别的地方复制过来的配置,其内容如下:

[global]

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log

log_level = notice


[www]

listen = /tmp/php-cgi.sock

listen.backlog = -1

listen.allowed_clients = 127.0.0.1

listen.owner = www

listen.group = www

listen.mode = 0666

user = www

group = www

pm = dynamic


pm.max_children = 300

pm.start_servers = 80

pm.min_spare_servers = 80

pm.max_spare_servers = 300



access.log = /mnt/log/phplog/$pool.access.log

access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"


pm.max_requests = 1024

request_terminate_timeout = 0


request_slowlog_timeout = 120

slowlog = /var/log/slow.log

这几个选项值,直接与性能相关。查看php进程数,一直就是设定的数量300(主进程不算)。最大300,而且一直维持不变,新来的请求无法获得新的进程,于是就只好杀掉已经运行的(有可能用户的连接还在),类似于自杀,可以从php的日志里可以看到大量的进程自杀消息。

blob.png

一般情况下,应该把最大子进程数(pm.max_children = 300)设置得大一些,最大请求数(pm.max_requests)也需要设置大一些。


把这些问题,记录好汇总以后,电话跟其他人沟通,得到答复是等相关人等在线的时候进行修正,万一业务上有问题,可以一起协助处理,但得等两天以后。欲知详细的操作过程,调整后的效果,请猛戳此处即可。



















本文转自sery51CTO博客,原文链接:http://blog.51cto.com/sery/2053947 ,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
网络协议 容灾 NoSQL
阿里云DTS踩坑经验分享系列|网络问题排查大法
在DTS的所有用户问题中,网络问题出现的概率居高不下,很大程度上是由于DTS的链路复杂性,从源数据库到DTS再从DTS到目的数据库,任意的一个部位发生网络不通、网络质量问题都有可能导致DTS任务的中断,或者延迟。本文希望以一种最简单的模型,简述DTS网络不通问题的排查方法,并给出一些简单的验证思路及手段,排查方向对了才能事半功倍。
108941 3
阿里云DTS踩坑经验分享系列|网络问题排查大法
|
4月前
|
人工智能 自然语言处理 算法
【简历优化平台-07】重大改版
【简历优化平台-07】重大改版
|
8月前
|
Java 程序员 开发者
太卷了!这份Java性能调优手册仅上线1小时,竟被恶意封杀下架
在各大厂的面试中,性能优化的问题肯定不会缺席,这足以说明其重要性。今天给大家带来的便是由资深程序员葛一鸣老师写的《Java程序性能优化实战》,同样是没有开源版本,我会将领取方式放在文末 Java程序性能优化实战 我看过几篇讲解Java程序性能优化的图书,要么是内容不够深入,要么是过于晦涩难懂,不够浅显,而这本书却让我眼前一亮,很多困扰我的问题都能在书中找到答案。它涵盖了各种程序员所需的性能优化知识点,是Java开发者提升水平的必读佳作 来看看目录内容,里面一定有你想看的 亮个相吧(狗头.jpg) 想要更进一步的Java开发者一定不能
49 0
|
存储 SQL 数据采集
性能测试知识科普(七):监控能给你带来什么
当然这些指标是我们日常工作中经常遇到和会关注的,但实际上在性能测试过程中,要根据不同的业务场景、技术架构以及问题表现来关注分析不同的指标。而不是只关注自己看到的指标,填充到表格里提交一份所谓的压测报告就完事的。
性能测试知识科普(七):监控能给你带来什么
|
监控
《“啄”壮成长,移动app线上日志分析利器》电子版地址
“啄”壮成长,移动app线上日志分析利器
58 0
《“啄”壮成长,移动app线上日志分析利器》电子版地址
淘宝预售“买崩”程序员20分钟修复,全靠这份亿级流量并发手册
朋友们,今年双11电商大促即将到达,感受到四面八方激动的心情没有? 去年天猫淘宝在双十一中订单可是破了58.3万笔/秒,预测一波今年成交额又会打破去年记录。作为一名互联网民工,我关心的不是订单有多少,而是系统竟然没崩!以及这背后为了抗住这巨大的并发量的程序员同胞们……
《网站性能与体验优化实践指北》电子版地址
《网站性能与体验优化实践指北》PDF
52 0
《网站性能与体验优化实践指北》电子版地址
|
Web App开发 前端开发 网络协议
实践一下前端性能分析
最近在读一本经典书《高性能网站建设进阶指南》。 虽然书籍很多年前就出版了,但里面的内容还是耐人寻味,这次就好好的实践了一下。 纸上得来终觉浅,绝知此事要躬行,实践中将会发现一些问题。 有个官方网址《Even Faster Web Sites》,点击“Run the Examples”按钮,就能进入在线demo。 在Github上面有个叫awesome-wpo的项目,里面记录了各个方面关于性能的资源,有书籍、文章、工具等。 下面所有的实验都是在Chrome 49浏览器中执行的。
实践一下前端性能分析
|
监控 程序员 开发工具
2021 友盟+移动应用性能挑战赛 -- Unity开发游戏启动慢问题解决方案
探索Unity制作游戏启动慢的问题原因分析和使用友盟+定位问题及处理问题的解决方案记录。
280 0
2021 友盟+移动应用性能挑战赛 -- Unity开发游戏启动慢问题解决方案
|
缓存 监控 网络协议
【性能优化】小伙伴问我性能指标监控怎么做,这次我安排上了!!
在【冰河技术】微信公众号的《【高并发】面试官:性能优化有哪些衡量指标?需要注意什么?》一文中,介绍了性能优化的衡量指标和期间需要注意的事项,属于理论篇的内容。这不,在文章下方就有小伙伴问我:监控怎么做?我理解了他的意思后,今天就安排上了。
132 0
【性能优化】小伙伴问我性能指标监控怎么做,这次我安排上了!!