一次网站性能排查实录

news/2024/5/9 9:26:06/文章来源:https://blog.csdn.net/weixin_33757609/article/details/85176609

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


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


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


通过了解,该云主机带宽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)也需要设置大一些。


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



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_702094.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云系列——3.企业网站备案步骤---2018-1-4

网站部署之~阿里云系列汇总 http://www.cnblogs.com/dunitian/p/4958462.html 个人网站备案:http://www.cnblogs.com/dunitian/p/4958268.html 先说企业的域名实名认证:一张图就ok了 说下步骤,其实和个人差不多,简单过下吧 1.填写…

网站故障排查常用命令

为什么80%的码农都做不了架构师?>>> 整理总结了一些常用分析网站的命令方便大家快速定位故障所在排除故障,最小化的减少故障给业务带来的影响。 1.查看TCP连接状态 netstat -nat |awk {print $6}|sort|uniq -c|sort -rn netstat -n | awk /…

大型网站技术架构(七)网站的可扩展性架构

2019独角兽企业重金招聘Python工程师标准>>> 扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。 设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性。模…

汉字字符编码在线查询的网站

推荐一个汉字字符编码在线查询的网站,常用的编码方式通吃: https://www.qqxiuzi.cn/bianma/zifuji.php 效果:

如何知道一个网站的后台地址_你的网站在给别人盈利你知道吗?快来修改后台地址和账号密码...

众所周知,网站的安装程序是固定的,安装织梦模板的流程大家都会,这时大家会发现一个问题,我是这样安装的,别人也是这样安装的,那么是不是所有人的网站后台都是:http://你的域名/dede/&#xff0c…

全文搜索引擎有哪些?_搜索引擎工作原理是什么?seo蜘蛛抓取会受到哪些因素影响?...

seo优化就是搜索引擎优化,就是对网站进行各方面调整,使其更符合搜索引擎的算法要求,从而得到更多的流量及转化,所以做seo必须要多搜索引擎有更多的认识和了解。搜索引擎有哪些功能模块?它的工作原理是什么?…

作者免费分享自己论文也不行,知名学术社交网站被判侵权,此前已下架20万余篇论文...

萧箫 发自 凹非寺量子位 | 公众号 QbitAI这场关于“开放获取”的官司,最终还是出版商们打赢了。知名学术社交网站ResearchGate被判下架50篇受版权保护的论文,并被要求对侵权内容负责。起因是爱思唯尔和ACS(美国化学学会)发现&…

网站 java php_做网站用java还是php

做网站用java还是php?做网站用PHP会更合适, 因为php主要就是用于web网站开发方面,开发比较快速。1,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于…

最大日漫网站崩了/ 马斯克星链要搞手机业务/ PS5涨价…今日更多新鲜事在此

日报君 发自 凹非寺量子位 | 公众号 QbitAI大家好,今天是8月26日,周五了~今天科技圈都有什么大事?来跟日报君一起看看吧。今日大新闻索尼宣布PS5涨价,国行版上调400元索尼的PS5涨价了,中国大陆国行PS5数字版…

虚拟机复制后需要改什么_网站改版后为什么需要每月运营维护?

我们都知道购买新车的陈词滥调,一旦您开了一些时间后,它的价值就会下降。尽管这可能是正确的,但您至少会放心,因为知道在最初几年出现任何问题时,保修将为您提供保护。如果您的发动机卡住了或您的变速器出现故障&#…

python实现简单爬虫功能(网站图片)

转自http://www.cnblogs.com/fnng/p/3576154.html 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键&…

几个不错的java类、jar包及其依赖查找网站。。。

为什么80%的码农都做不了架构师?>>> 开发过程中有时需要查找类对应的jar包及其依赖,并且要能够下载。。。 之前都是用的以下两个(第一个还是不错,第二个比较垃圾,很多都查不到- -!) http://www…

四、管理网站(一) Using the command line interface

Orchard为许多在管理面板中可用的和不可用的功能的命令行接口。命令行工具名称是 “orchard.exe”,在网站根目录下bin目录中。 Using Commands 要查看可用的命令,输入help commands。 orchard> help commands List of available commands: ----------…

记一次网站服务器搬迁实录

这是一篇记录在日志里面的文章,今儿趁有时间整理整理。这篇文章记录了整个服务器切换的具体步骤和实施细则,一些小网站的搬迁和服务器的迁移可以做个参考。同时也记录下,方便自己的查阅。这是一个phpmysql写的网站,前期用的window…

经典网页设计:20个与众不同的 Flash 网站设计作品

如果你正在为你的 Flash 网站设计项目寻找灵感和新思路,那么这篇文章推荐的20个非常有创意的 Flash 网站设计作品相信能帮助到你。Flash 网站页面美观,互动性强,可以声形并茂,实现普通的 HTML 网站不能制造出的质感和动作&#xf…

curl网站开发指南

转载 http://www.ruanyifeng.com/blog/2011/09/curl.html 我一向以为,curl只是一个编程用的函数库。最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法。curl网站开发指南阮一峰 整理curl是一种命令行…

我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

评论 文章目录 为什么要Https如何选择Https安装部署SSL证书平滑过渡Https搜索引擎的响应启用Https小结正如大家所看到的,部落全站已经启用了Https访问了,连续几天的网站安装和调试SSL终于可以告一段落了。曾经看到身边不少的朋友纷纷启用Https&#xff…

网站无法显示logo?

那是因为你没有配置favicon.ico,每个网站根目录都会有一个favicon.ico,因为每个服务器都会请求根目录下的它。 转载于:https://www.cnblogs.com/cisum/p/8743722.html

html优化网站的方法,利用HTML优化加快网页速度方法介绍

减少web页面下载时间的关键就是设法减小文件大小。当多个页面共用一些成分内容时,就可以考虑将这些公用部分单独分离出来。比如:我们可以将多个HTML页面都用到的脚本程序编写成独立存在的。js文件,然后再在页面中按如下方式调用它&#xff1a…

优化网站设计(七):避免在CSS中使用表达式

前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。 作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices fo…