性能优化笔记:参考https://mp.weixin.qq.com/s/phXzTBqhC3LQ3-8NTV6Z9Q

1)缓存
2)异步:多线程、消息队列
3)分布式
4)IO场景:长连接代替短链接;打包发送数据
5)数据库的调优,总的来说分为以下三部分:sql语句、连接池、索引
6)关注CPU平均负载的时候,特别需要注意趋势的变化。如果 1 分钟/5 分钟/15 分钟的三个值相差不大,那说明系统负载很平稳

7)挂起状态的线程数过多,意味着程序里锁竞争激烈,需要考虑通过其它的方案来缩小锁的粒度、级别,甚至是避免用锁
8)关注端口的使用和每个端口上的连接状态情况。比较常见的问题是,连接用完有没有及时释放,导致端口被占满,后续新的网络请求无法建立连接通道。(可以通过netstat、ss获取网络相关的信息
9)磁盘:
第一点,如果I/O利用率很高,但是吞吐量很小,则意味着存在较多的磁盘随机读写,最好把随机读写优化成顺序读写。(可以通过 strace 或者 blktrace 观察 I/O 是否连续判断是否是顺序的读写行为)

其次,如果I/O等待队列的长度比较大,则该磁盘存在 I/O 性能问题。一般来说,如果队列长度持续超过2就可以这么认为。
10)内存:有一个Swap换入和换出的内存大小需要特别注意一下。因为Swap需要读写磁盘,所以性能不是很高

做优化的时候建议从应用程序层面开始,再到组件层面,最后才是系统层面,从上往下,层层深入

组件是指那些非业务性的东西,比如一些中间件、数据库、运行时的环境(JVM、WebServer)








原文地址:https://www.cnblogs.com/testzcy/p/12522295.html