一次网站性能排查实录

news/2024/5/16 17:27:03/文章来源:https://blog.csdn.net/weixin_33781606/article/details/85114771

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


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


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


通过了解,该云主机带宽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_825032.aspx

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

相关文章

Visual Studio 2012网站如何只生成一个DLL文件

简介: 在Visual Studio 2005,2008,2010版本中,都有Web Deployment工具将网站进行发布,所有代码文件和库文件发布,生成为一个动态链接库文件,而在Visual Studio 2012中却不再提供此工具。 而这一功能实际上已经内置在Vi…

第一阶段:前端开发_HTML——网站后台显示页面

2018-03-30 HTML 一、HTML介绍 1)超文本标记语言: 超文本:页面内可以包含图片、链接,甚至音乐、程序等非文字元素,比普通文本更强大。 标记语言:使用一组标签对内容进行描述的一门语言,它不是编…

手把手教你从零基础开始搭建个人网站

曾有不少人问过我怎么搭建自己的博客。其实搭建个人博客的方式有很多,有使用Git Page的,有使用一些博客平台的,也有自己购买网站空间或服务器搭建的,更有大神索性自己开发一套博客程序来用的。本文所介绍的方法全部基于Linux系统服…

传统网站维护难,智能化建站平台帮助国际学校一站解决...

公司名称:句容碧桂园学校客户公司行业: 教育学校网站网址:http://www.jrbgy.net/建站产品:云企业官网--阿里云市场自营建站产品 句容碧桂园学校是碧桂园教育集团旗下连锁学校,从幼儿园至大学预科15年一贯的全日制寄宿制…

阿里云个人网站LAMP

阿里云建站-官方教程 例如你的 root用户现在没有密码,你希望的密码修改为abc,那么命令是:mysqladmin -u root password abc 解决Apache无法解析PHP问题 如果没有mbstring模块需要手动安装↓,修改php.ini(extension_d…

网站服务器购买配置选购方案

云服务器 的配置选择,和网站或应用的类型、访问量、数据量大小、程序质量等因素有关,建议和您的网站或应用的开发技术人员沟通,选择最适合您的配置。 如果您没有技术人员可提供建议,可以参考我们的建议进行配置选择。网站初始阶段…

一个对开发者可能会越来越有用的网站

i18n啥是 i18n?这应该又是一个程序员的智慧。我们经常在某些软件里面会看到 i18n 目录,它代表的就是应用程序本地化代码的目录。那为什么有个这么奇怪的名字呢?因为 Internationalization 作为目录名字来说,实在是太长了啊啊啊啊啊…

【大数据之网站用户行为分析】

网站数据分析历史,从“您是第***位来访用户”到现在百家齐放的专业工具提供商,网站分析已经逐渐发展衍化成一门科学。但面对形态各异的分析数据,很多人仍然困惑于数据的来源,了解数据的收集原理,也许对你解决这些困惑有…

几个游戏门户网站的对比,挺说明问题哦。

几个游戏门户网站的对比,挺说明问题哦。

拒绝 IE 的网站

如果你用 IE 访问 http://www.openaddict.com/ ,你将被拒绝:If youre reading this it means youre using Microsofts Internet Explorer to attempt to view Open Addict.com. Youre being blocked because Internet Explorer doesnt adhere to web sta…

渗透某政府网站

导读: 适合新手去学习 这是第一次接触PHP注入,所有的东西都是在入侵中自己找到的。 是一个政府的网站,这个城市和我还有些渊源,在这里就不多说了!在主页找了一个PHP?ID的连接,加个返回出错了&am…

谈谈网站权重的制约因素 - 老吧网

导读: 作为SEO大家非常关注自己网站的排名与对手排名的差距,大家知道网站的权重直接关系到网站排名,好的排名会给我们带来更多的收益,互联网上大多的文章抄来抄去转来转去,缺少自己的观念和想法,别人的观点…

java网站环境搭建,JavaWEB环境搭建

笔记:JavaWEB环境搭建web开发预备知识:HTTPHTTP协议是基于TCP/IP协议之上的应用层协议客户端与Web服务器的HTTP端口建立一个TCP套接字连接,请求和响应都是通过TCP传送的请求报文组成:请求行 请求头部 空行 请求数据响应组成&am…

Python爬虫,爬取网站图片,详细解释(看完就会)

Xpath 解析图片项目 # 指定url url http://pic.netbian.com/4kyingshi/ # UA伪装 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48 } # 发送请求 respons…

个人网站架构设计(三) - 从设计到前端到后台

网站地址:http://barretlee.com 在五月份,写过两篇博客,提到了要给自己做个网站,当时人在实习,没太多的时间,只是把大概的思路捋了一番,顺道也买了个云主机(配置比较低,内…

网站架设与Web编程技术

2019独角兽企业重金招聘Python工程师标准>>> http://xkzx.sdut.edu.cn/xdreamer/OnLineDoc/Xdreamer/MyWebProg1/intro.html 转载于:https://my.oschina.net/floristgao/blog/291395

复杂网站的爬取实践

实用模块及网页知识拓展一、模拟网站登录1.cookie及其用法2.session及其用法3.cookies的存取及调用二、用程序指挥浏览器1.初识selenium2.selenium的使用3.解析网站,提取数据4.文本输入与模拟点击三、让爬虫学会定时汇报1.schedule的使用方法2.schedule的实战应用i.…

高效爬取网站信息

建立爬虫大军1.简谈多协程2.探索多协程用法3.创立多个爬虫3.1 queue模块3.2队列的应用与多协程实现3.3多协程运行的输出结果与解密3.4多协程与debug4.多协程实战应用4.1分析任务4.2format方法的应用4.3 拆解任务i.存放网站ii.爬取内容iii.使用多协程爬取内容,并存入…

分布式计算,大型网站技术架构:核心原理与案例分析

这个回答,非常详细。但是,大部分内容,都来自“大型网站技术架构:核心原理与案例分析”。最近,初步看了这本书,觉得写得太好了,比较系统和全面。不过,我还是不喜欢吹B“听群一席话&am…