生产环境运行效率
用户反馈系统运行慢,程序偶发性报502、503错误?
兄弟 ,那你可能遇到了程序运行效率跟不上的问题了。哥们给你总结了以下几个排查方法和优化方法,仅供参考。
本贴持续更新中ing
一、 排查方法
1. 查看服务器 CPU、内存、硬盘读写 等资源占用情况
分析出 硬件瓶颈 和 对应的程序及瓶颈功能
2. SqlProfiler 查看查询长时间的语句
跟踪出堵塞或者死锁
3. SqlServer 报表查看统计分析
查看执行时长等报表
4. 程序日志
为程序添加日志,分析各个环节的执行情况
5. NGINX 开启操作时长记录
配置access.log输出的内容项,查看access.log
6. ocelot
查看NLOG
7. IIS
查看连接数、等待数
报错:
502 队列满了,或者 站点挂了 ??
503 进了队列,但处理不过来,超时了
8. 查看端口使用情况
netstat -ano | findstr "TIME_WAIT"
netstat -ano | findstr "CLOSE_WAIT"
netstat -ant -p TCP
排查端口使用情况,调度、轮循作业未及时释放端口容易导致端口用爆
9. 暂停使用轮循环和调度
使用Quartz \\ Interval 等反复执行的语句,多线程大并发 等,容易因为对象不及时释放导致端口、连接资源 被用净
二、 常用优化方法
1. 池式连接
HttpClient、数据库连接对接对象 等采用可复用的池式连接
2. 对象关闭
对象使用完后,及时关闭 close(); dispose(); using(type c = new type()){}
3. 合理使用多线程
Mta 调用Sta,用队列模型调用;
异构系统中,考虑对接方的承受力,合理决策对接方式;
设置单个线程超时机制;
4. 设置中间件
队列数、并发处理数、超时时间;集群和服务拆解;
5. 超时时间、运行时间
代码层面单个任务设置合理的超时时间,过期不候,以保证全局多个任务顺利进行
6. 线程锁、数据库锁分析与排查
三、 参考文档
1. 服务器大量TIME_WAIT和CLOSE_WAIT的原因及解决办法 - GaoYanbing - 博客园
2. IIS最大并发连接数 = 队列长度 + IIS最大并发工作线程数 深入理解IIS的多线程工作机制你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗? - 爱码网
3. Nginx查看并发连接数的2种方法
4. windows如何要查看IIS连接数