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上运行正常后,很少会去 ...
随机推荐
- asp.net 利用HttpWebRequest自动获取网页编码并获取网页源代码
/// <summary> /// 获取源代码 /// </summary> /// <param name="url"></param& ...
- 【JavaScript】2013年人气最高的JavaScript框架排名
本文概述 本文介绍2013年人气急速上升,2014年必须知道的JavaScript框架排名.本文所介绍的排名为Google根据全世界2013年的搜索关键词所做出的统计结果. MVC框架 JavaScr ...
- nginx 设置错误的自己定义404页面跳转到500
5年前写的站, 当时是在apache下写的error page, 换了nginx后, 404页面直接跳到了500 server内部错误. 仅仅须要在配置 try_files 的时候指定一下就能够了 我 ...
- ng-class
在前面Angularjs开发一些经验总结中我们说到在angular开发中angular controller never 包含DOM元素(html/css),在controller需要一个简单的POJ ...
- 打造通用的Android下拉刷新组件(适用于ListView、GridView等各类View)
前言 近期在做项目时,使用了一个开源的下拉刷新ListView组件.极其的不稳定,bug还多.稳定的组件又写得太复杂了,jar包较大.在我的一篇博客中也讲述过下拉刷新的实现,即Android打造(Li ...
- 解决Html.CheckBoxFor中”无法将类型 bool 隐式转换为 bool。存在一个显式转换..."的方法
在后面加.Value属性 @Html.CheckBoxFor(m => m.IsComment.Value, new { style = "vertical-align: middle ...
- windows vbs显示桌面命令
windows vbs显示桌面命令 CreationTime--2018年7月26日11点32分 Author:Marydon Dim shell Set shell = CreateObject ...
- hibernate中错误笔记
1.在写Student.hbm.xml 中, hibernate-mapping 中 指定类和数据库对应的表字段时,不小心将property写为properties,报错: ERROR: HHH000 ...
- asp.net MVC 视图文件(cshtml/vbhtml)变更编译过程示范
更改cshtml文件的时候 并不会触发程序重新启动,而是进入了编译状态 csc.exe进程启动. 非阻塞的方式进行等待,延时等待. 示范程序:http://pan.baidu.com/s/1skDY ...
- 点滴记录——在Ubuntu 14.04中使SublimeText 3支持中文输入法
在Ubuntu 14.04中安装了SublimeText 3之后发现既然不支持输入中文,于是在网上搜罗一下,发现非常多人遇到了相同的问题,可是解决的方法大该就仅仅有一个.以下依据自身的安装及解决的方法 ...