如何解决在服务器维护中处理高并发所导致的一些常见问题
这里还是按照场景来吧,毕竟场景是最能体验实用性的。首先说下服务器配置以及环境
阿里云ECS云主机,8G内存,4核的CPU,20M带宽,20G系统盘+200G数据盘,CentOS6.564位,安装的一件集成lnmp环境
场景:微信发红包
这个场景是很常见的,一般客户会在整点的时候进行一次微信公众号的广告推送,这儿时候服务器的并发大概在3000到5000左右。说起来这其实并不算是高并发,但是服务器还是崩了,大概需要等待5分钟之后才能恢复正常。这有点不应该啊,分析原因。查看CPU的利用率并不高,内存使用也很正常,在阿里云控制面板里面查看网络出口流量满载,问题大概是清楚了,网络原因导致。
首先查看静态资源,发现图片大部分没有优化,于是脱下来进行无损压缩,大概省略了1M左右的大小,提交上去后依然崩溃,服务器频繁出现502。
再次检查页面的静态资源css和js,把常用的js库替换成CDN以减少请求数,提交后依然没有多少变化,502依旧。
于是查看nginx连接数,使用命令
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
结果显示
TIME_WAIT 3828SYN_SENT 1FIN_WAIT1 107FIN_WAIT2 27ESTABLISHED 661SYN_RECV 23CLOSING 15LAST_ACK 284
乖乖,TIME_WAITE很高,这里务必说下TIME_WAITE的含义:TIME_WAIT:另一边已初始化一个释放。这个是啥意思呢?意思就是服务器已经主动关闭了,在等待客户端给一个回应,如果客户端一直没有回应就会出现等待,这个值就会增加。很显然,这个时候我们需要减少TIME_WAIT的值。
这里只需要修改sysctl.conf的一些参数即可,编辑/etc/sysctl.conf文件,检查
是否是这样的设置,如果找不到对应的,在文件最后加上即可。保存后执行
/sbin/sysctl -p
配置即可生效。
20分钟后继续查看nginx连接数,结果
TIME_WAIT 87SYN_SENT 1FIN_WAIT1 60FIN_WAIT2 19ESTABLISHED 477SYN_RECV 12CLOSING 2LAST_ACK 100
恢复正常,网络带宽也降下来了。
但是好景不长,第二次整点开始抢红包的时候又出现了502。查看进程发现mysqld的CPU占用率很高,导致CPU满载,服务器崩溃。修改mysql配置文件,调整max_connection为30000。其他相关参数进行了调整优化,情况有所缓解,但是短短几分钟之内CPU又满载了。
诡异!于是查看mysql中的进程,发现频繁的sql查询,而所查询的几个表数据量均在10万左右,判断是因为没有设置索引导致。咨询后端开发,果然是只设置了主键。立刻修改,提交上去五分钟后CPU降下来,稳定在10%左右,也没有出现过502了。
以上是如何解决在服务器维护中处理高并发所导致的一些常见问题的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

使用Java函数的并发和多线程技术可以提升应用程序性能,包括以下步骤:理解并发和多线程概念。利用Java的并发和多线程库,如ExecutorService和Callable。实践多线程矩阵乘法等案例,大大缩短执行时间。享受并发和多线程带来的应用程序响应速度提升和处理效率优化等优势。

如何在服务器上安装PHPFFmpeg扩展?在服务器上安装PHPFFmpeg扩展可以帮助我们在PHP项目中处理音视频文件,实现音视频文件的编解码、剪辑、处理等功能。本文将介绍如何在服务器上安装PHPFFmpeg扩展,以及具体的代码示例。首先,我们需要确保服务器上已经安装了PHP以及FFmpeg。如果没有安装FFmpeg,可以按照以下步骤安装FFmpe

并发和协程在GoAPI设计中可用于:高性能处理:同时处理多个请求以提高性能。异步处理:使用协程异步处理任务(例如发送电子邮件),释放主线程。流处理:使用协程高效处理数据流(例如数据库读取)。

本站7月23日消息,华硕推出多款由AMDEPYC霄龙4004系列处理器驱动的服务器与工作站级产品。本站注:AMD于5月推出AM5平台、Zen4架构的EPYC霄龙4004系列处理器,最高提供16核3DV-Cache规格。ASUSProER100AB6服务器ASUSProER100AB6是一款搭载EPYC霄龙4004系列处理器的1U机架式服务器产品,适用于IDC及中小型企业需求。ASUSExpertCenterProET500AB6工作站ASUSExpertCenterProET500AB6是一款A

对并发函数进行单元测试至关重要,因为这有助于确保其在并发环境中的正确行为。测试并发函数时必须考虑互斥、同步和隔离等基本原理。可以通过模拟、测试竞争条件和验证结果等方法对并发函数进行单元测试。

PHP多线程函数中的并发问题可以通过使用以下方法解决:使用同步工具(如互斥锁)来管理多线程访问共享资源。使用支持互斥选项的函数,以确保函数在另一个线程执行时不会被重新调用。将非可重入函数包装在同步块中,以保护函数调用。

Java并发库提供了多种工具,包括:线程池:用于管理线程,提高效率。锁:用于同步对共享资源的访问。屏障:用于等待所有线程到达指定点。原子操作:不可分割的单元,确保线程安全。并发队列:线程安全的队列,允许多线程同时操作。

事务确保数据库数据完整性,包括原子性、一致性、隔离性和持久性。JDBC使用Connection接口提供事务控制(setAutoCommit、commit、rollback)。并发控制机制协调并发操作,使用锁或乐观/悲观并发控制来实现事务隔离性,以防止数据不一致。
