性能调优考虑

性能调优考虑

性能调优思考

关于性能应该是程序孜孜不倦的方向,对于JavaC++的方向应该不太一样。一般来讲Java的应用场景不太会有比较复杂的计算。所以很多Web程序员做了半天总结了四个字:“增删改查”。但这四个字所蕴含的东西远不指这么简单,当放到不同的场景下处理策略下就完全不一样,越是简单的东西在不同场景下的弹性越大。

性能调优考虑

       从这个图可以看出越到后面可以做的事情越少,在Tomcat接收请求端可以对Scoket请求做一个丢弃处理。Tomcat本身也是运用了线程池来管理请求线程。如果对请求不作限制很容易就OOM宕机。这一层大概描述一下。

具体说一下在应用层如何防止宕机。对于多并发场景来讲。

一、知道当前应用的并发量以及性能瓶颈。

                            i.              其实这个还是比较好理解,对于web应用来说一般没有复杂的计算逻辑,基本上就是网络和IO,IO都会比较注意,其实IO不仅包括磁盘内存的IO,也包括网络IO。另外一个比较重要的点就是网络开销。其实网络的开销有时候也是一个瓶颈,比如说北京的服务器,杭州的客户端访问,中间的网络开销(仅数据传输,可以大概算一下)大概在40ms。而且这部分开销是没办法通过程序优化的,除非增加节点,比如说在杭州增加一个节点。

二、实施策略

                            i.              比如说tomcat接收请求的性能是是访问DB性能的十倍,那么性能瓶颈就在访问DB上。所以着力点也是如何优化访问DB的性能。这里可以参照硬件的优化分层策略,硬件有L1,L2,L3,主存,磁盘,这些存储速度逐级降低。所以操作系统的调度和数据交换一般会尽量在主存和缓存中进行,提高缓存和主存的命中率比较重要。DB的访问就像是访问磁盘。这里优化可以在DB前面再加一层内存缓存。把一些热点数据放在缓存中,以降低对DB的请求,提高整体性能。这就是合理的利用内存的优势。

                          ii.              这里说到DB的优化就是水平扩展,这也是目前大部分网站在做的。因为单机处理能力毕竟有限,所以集群成为大型网站的必选之路。这也是当前所流行的云的优势。