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上运行正常后,很少会去 ...
随机推荐
- 水晶报表WEB方式下不打印的问题
水晶报表版本是10.2.3600.0,是vs2005自带的.功能原来正常,服务器重做后不能打印,但是导出功能正常. 研究的大概情况: 1.水晶报表的web相关代码位于\aspnet_client\sy ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence
D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...
- 搜集整理一些Cron表达式例子
1.cronExpression配置说明 字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / ...
- discuz,ecshop的伪静态规则(apache+nginx)
discuz(nginx): (备注:该规则也适用于二级目录) rewrite ^([^\.]*)/topic-(.+)\.html$ $/portal.php?mod=topic&topic ...
- vsftpd 本地用户无法登陆 530 Login incorrect
查看日志,监测用户无法登陆的错误日志 tail -f /var/log/secure 查看vsFTPd配置 /etc/vsftpd/vsftpd.conf 通过查看日志,发现用户的密码已经过期了... ...
- ubuntu执行级别,设置单用户模式
redhat的runlevel级别定义例如以下: 0:关机.不能将系统缺省执行级别设置为0,否则无法启动. 1:单用户模式.仅仅同意root用户对系统进行维护. 2:多用户模式.但不能使用NFS( ...
- 【图像算法】彩色图像切割专题八:基于MeanShift的彩色切割
>原理曾经的博客中已经有对meanshift原理的解释,这里就不啰嗦了.国外的资料看这:http://people.csail.mit.edu/sparis/#cvpr07 >源代码 核心 ...
- Linux下挂载硬盘分区的几种方法
1.使用Autofs自动挂载分区 2.修改/etc/fstab 3.编写shell脚本,开机自动运行mount命令 方法一.使用Autofs 1.Autofs的特点:Autofs与Mount/Um ...
- RFID编码
信号编码系统包括信源编码和信道编码两大类,器作用是把要传输的信息尽可能的与传输信道相匹配,并提供对信息的某种保护以防止信息受到干扰.信源编码与信源译码的目的是提高信息传输的有效性以及完成模数转换等:信 ...
- C# 文件与路径操作
OpenFileDialog private void btnOpenFileDialog_Click(object sender, EventArgs e) { OpenFileDialog ope ...