内外外贸购物网站建设,母婴网站源码php,做类似淘宝网站怎么做的,购物网站哪个东西便宜质量好问题背景#xff1a;
近期针对老的PHP接口做了迁移重构#xff0c;用golang重新实现#xff0c;在上线之前#xff0c;测试进行了压测#xff0c;压测的量级为#xff1a;200请求/s, 连续请求10s#xff0c;发现接口出现大量超时错误#xff0c;查看日志发现错误信息为…问题背景
近期针对老的PHP接口做了迁移重构用golang重新实现在上线之前测试进行了压测压测的量级为200请求/s, 连续请求10s发现接口出现大量超时错误查看日志发现错误信息为socket: too many open files 测试服务器配置4核8G 问题分析
出现问题后心里大概猜测是新版go接口使用了大量协程并发的去调用其他服务获取数据导致一瞬间将socket链接数占满导致的
首先查看了系统的文件描述符打开限制, 为65535 然后让测试帮忙重新压测查看项目进程使用的文件描述符数量 发现并没有达到系统限制
然后百度进行查询才知道每个进程有自己的文件描述限制查看方式如下
cat /proc/839357/limits 可以看到当前项目进程的文件描述限制为 1024 那到这里一下就明朗了确实是文件描述符不够用导致的
那么问题来了这个进程的文件描述符石谁来控制的呢我想到我们的go服务使用守护进程来进行统一管理的百度查询后了解到守护进程有一个默认的文件描述符配置初始值为1024不做修改的话守护进程启动的每个服务文件描述限制都是1024如下图 问题解决 为了临时解决此问题决定修改为65535发现改了配置之后reload、update都不生效必须重启守护进程这里要特别注意
因为线上守护进程不能随意重启所以通过代码修改了此配置代码如下
syscall.Setrlimit(syscall.RLIMIT_NOFILE, syscall.Rlimit{Max: 65535,Cur: 65535,
})
至此这个问题算是临时解决可以正常上线 深层次思考
通过这个问题可以看出系统本身的抗并发能力很弱所以上线后又进行一次具体的分析分析思路如下
模拟压测请求查看并发情况下开启的协程数量 基本协程的使用都是请求其他服务的接口通过这个来看对其他服务的并发调用情况查看依赖服务主要接口的抗并发能力在并发量大的情况下依赖服务是否存在问题从而影响web端调用其他服务是否使用了连接池tcp是否进行了复用链接是否正常关闭调用其他服务是否有做超时熔断以此来保证当前服务的稳定性当前服务是否有做限流控制当并发超过承受能力后新的流量只会机器压力更大导致服务出现更多的问题对携程的使用是否要加以控制比如使用协程池 go萌新一枚后续的线上问题以及解决过程会持续更新
下篇文章会针对各项思考去逐个分析