web服务器优化的一些思路
作为一个新手(并不是菜鸟,而是像我们这样的学生),维护一个网站往往是一个很头疼的问题,尤其是动态网站,更尤其是用java写的网站.
当网站的吞吐量很小的时候你会发现服务器根本不需要维护,因为几乎没有延迟宕机等bug出现,但是当你的网站源代码达到10M以上时你就要小心了,你的网站随时会崩溃,即使没有ddos.
虽然不是专业的服务器维护人员也不是专业的算法工程师,但是我根据经验总结出了一下几个思路,可以很有效的提高你的网站的可用性.
数据库篇
数据库是影响网站可用性的最重要的因素,70%以上的小型网站的宕机问题都是由于数据库崩溃造成的,怎么做呢?
使用连接池
数据库连接池类似tcp连接,需要消耗时空资源来建立,维护,销毁一个连接,再使用它,但是数据库的访问是位于web服务器架构最底层的dao层,可以说和用户之间没有任何直接联系,而且数据库多连接的初衷是多个数据库访问之间相互隔离,互不干扰,以达到安全的目录,但是对于一个网站整体来说,内部的对象和方法都是相互信任的,甚至可以共享一个数据库连接.
这时候我们还需要为每一个请求,每一个服务,每一个方法维护一个数据库连接对象吗?显然是浪费生命.
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
市场上基于java的开源连接池有dbcp,c3p0等比较主流,还有hibernete框架提供了封装好的连接池方法可以使用.
抛弃数据库
服务器缓存
即使建立 了数据库连接池,只是节省了数据库连接的开销,但是数据库还是要经受住大量的并发访问.但是为每一个动态网页访问一次数据库真的必要吗??
对于某些实时更新的网站比如某某股票走势图,那实时访问数据库是必须的,但是对于一个相对更静态的网页来说,比如我这个个人博客,里面的文章几乎是几天一更,这个时候就完全没必要浪费数据库资源了,甚至可以把动态网页(jsp)直接重写成静态的(html)文件给用户看,效果是一样的.
但是重写太鲁莽了,我们要做的是缓存以达到更弹性的效果.
经过上面一讲,大家对服务器缓存肯定没有疑惑了,它就是实现了一种对用户透明的一种优化机制,直接上产品吧,在java市场,web缓存发展的还不是很快,但一个主流的产品是OSCACHE,有以下特点:’
缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。 拥有全面的API–OSCache
API给你全面的程序来控制所有的OSCache特性。
永久缓存–缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。
支持集群–集群缓存数据能被单个的进行参数配置,不需要修改代码。
缓存记录的过期–你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)
“当然了,也可以自己手写”
浏览器缓存
为啥很多人选择关掉browser缓存啊,这明明是有利于双方的优良机制啊,又不是web前端人员嫉cache如仇..
不过缓存真的对小型服务器很友好,尤其是我们这些在阿里云腾讯云上租的廉价学生机,只有可怜如两三兆的出口带宽,不开启浏览器缓存的话真的是浪费钱,最好把超时时间弄长一点,24小时最好,java代码如下:
//设置浏览器缓存30分钟
resp.setHeader(“Cache-Control”, “public”);
resp.setHeader(“Pragma”, “Pragma”);
resp.setDateHeader(“expires”,new Date().getTime()+30*60*1000);
服务器代理
和服务器缓存不一样,代理类似过滤器,但是最好是在新的机器上部署,比如防火墙,好吧,做代理的效果其实就是升级硬件的效果,不过这是一种任务分离的思想,可以显著提高响应速度,亲测有效!
容器篇
定期重启
即使JVM的垃圾回收机制再好,总会有残留的内存垃圾,有的是由bug产生的,也有非bug产生的,但是无论如何,建过网站的小伙伴们都有感受,把服务器重启一番,或者把服务器软件重启一下,整个网站神清气爽,速度刷新.所以有了这个思路,也不必纠结于人生三大错觉之一的”我能管理好内存”了,重启大法好!
对于linux系统,可以利用crond命令来自动的周期性的重启服务器容器(tomcat):
crontab -e 0 0 * * * /usr/local/tomcat/bin/shutdown.sh >>
/root/reboot_tomcat_log 2>&1 1 0 * * *
/usr/local/tomcat/bin/startup.sh >> /root/reboot_tomcat_log 2>&1
crontab -l systemctl restart crond
web服务器优化的一些思路的更多相关文章
- centos7作为web服务器优化
centos7作为web服务器优化 原文 http://itindex.net/detail/51140-centos7-web-服务器 1.加大打开文件数的限制(open files) 查看 uli ...
- Web性能优化:基本思路和常用工具
听了荣华的演讲之后,我对性能优化有了更深层次的认识. 性能优化的重要性 性能优化是为了赢得用户,为了降低成本. 性能优化思路 Web常见优化点 Java常见排查工具
- Web服务器优化
系统 1. 修改远程默认端口 2. Raid5 3. IIS 1. 默认文档,仅保留一个有效的. 2. 数据库 1. 更改默认端口 2. 如果一台服务器,禁用网络登录
- 高并发WEB网站优化方案
一.什么是高并发在互联网时代,所讲的并发.高并发,通常是指并发访问,也就是在某个时间点,有多少个访问同时到来.比如,百度首页同时有1000个人访问,那么也就是并发为1000.通常一个系统的日PV在千万 ...
- Web服务器Nginx多方位优化策略
标签:性能 Web 架构 Nginx 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dongsong.blog.51cto.co ...
- Web服务器性能监控分析与优化
Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html
- web站点优化之使用tengine搭建静态资源服务器,静态资源合并加载案例剖析
在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构 ...
- 01、NetCore2.0优化之Web服务器 与 IIS解耦
01.NetCore2.0优化之Web服务器 与 IIS解耦 在Asp.Net Core 2.0中,是如何实现跨平台的?不使用IIS了,在linux上的WebServer是什么? ---------- ...
- (转)WEB服务器_IIS配置优化指南
原文地址:https://www.cnblogs.com/heyuquan/p/deploy-iis-set-performance-guide.html 通常把站点发布到IIS上运行正常后,很少会去 ...
随机推荐
- /etc/ssh/sshd_config 配置(ssh连接)
# Package generated configuration file# See the sshd_config(5) manpage for details # What ports, IPs ...
- .NET反编译之manager,base.AutoScaleMode修复
使用反编译软件导出项目时,出现警告:设计器无法处理第X 行的代码:this.AutoScaleMode = AutoScaleMode.Font;方法"InitializeComponent ...
- ASP.NET MVC中权限控制的简单实现
1.重写AuthorizeAttribute类,用自己的权限控制逻辑重写AuthorizeCore方法 public class MyAuthorizeAttribute : AuthorizeAtt ...
- JS 运算、判断优化
1.二级制操作优于Math 如: //函数向下取整 console.log(Math.floor(8.9)); //二进制向下取整 console.log(8.9>>0); 2.慎用|| ...
- [Exceptions Spring 2] - Cannot create a session after the response has been committed
2016-02-23 14:06:27,416 [http-bio-8080-exec-1] DEBUG [org.springframework.beans.factory.support.Defa ...
- Java之JVM调优案例分析与实战(3) - 堆外内存导致的溢出错误
环境:基于B\S的点子考试系统,为了发现客户端能实时地从服务端接收考试数据,系统使用了逆向AJAX技术(也称Comet或Server Side Push),选用CometD1.1.1作为服务端推送框架 ...
- chrome 如何官网下载谷歌浏览器离线安装包
如何官网下载chrome谷歌浏览器离线安装包 CreateTime--2017年7月4日08:38:30Author:Marydon 参考链接:http://jingyan.baidu.com/a ...
- 从缓存行出发理解volatile变量、伪共享False sharing、disruptor
volatilekeyword 当变量被某个线程A改动值之后.其他线程比方B若读取此变量的话,立马能够看到原来线程A改动后的值 注:普通变量与volatile变量的差别是volatile的特殊规则保证 ...
- OFBiz:配置过程
OFBiz使用了大量的配置文件,整个过程有点复杂.这里将配置过程大略整理了一下,方便后面查阅. 第一层:org.ofbiz.base.start.Start启动类.该类载入org/ofbiz/base ...
- 基于skitter的轮播图炫酷效果,幻灯片的体验
概述 包含各种炫酷的轮播切换效果,插件小巧,与其他插件无冲突,可用于移动端和PC端 详细 代码下载:http://www.demodashi.com/demo/11939.html 你还在用原生的js ...