作为一个新手(并不是菜鸟,而是像我们这样的学生),维护一个网站往往是一个很头疼的问题,尤其是动态网站,更尤其是用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服务器优化的一些思路的更多相关文章

  1. centos7作为web服务器优化

    centos7作为web服务器优化 原文 http://itindex.net/detail/51140-centos7-web-服务器 1.加大打开文件数的限制(open files) 查看 uli ...

  2. Web性能优化:基本思路和常用工具

    听了荣华的演讲之后,我对性能优化有了更深层次的认识. 性能优化的重要性 性能优化是为了赢得用户,为了降低成本. 性能优化思路 Web常见优化点   Java常见排查工具  

  3. Web服务器优化

    系统 1. 修改远程默认端口 2. Raid5 3. IIS 1. 默认文档,仅保留一个有效的. 2. 数据库 1. 更改默认端口 2. 如果一台服务器,禁用网络登录

  4. 高并发WEB网站优化方案

    一.什么是高并发在互联网时代,所讲的并发.高并发,通常是指并发访问,也就是在某个时间点,有多少个访问同时到来.比如,百度首页同时有1000个人访问,那么也就是并发为1000.通常一个系统的日PV在千万 ...

  5. Web服务器Nginx多方位优化策略

    标签:性能 Web 架构 Nginx 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dongsong.blog.51cto.co ...

  6. Web服务器性能监控分析与优化

    Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html

  7. web站点优化之使用tengine搭建静态资源服务器,静态资源合并加载案例剖析

    在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构 ...

  8. 01、NetCore2.0优化之Web服务器 与 IIS解耦

    01.NetCore2.0优化之Web服务器 与 IIS解耦 在Asp.Net Core 2.0中,是如何实现跨平台的?不使用IIS了,在linux上的WebServer是什么? ---------- ...

  9. (转)WEB服务器_IIS配置优化指南

    原文地址:https://www.cnblogs.com/heyuquan/p/deploy-iis-set-performance-guide.html 通常把站点发布到IIS上运行正常后,很少会去 ...

随机推荐

  1. 怎样更爽地看PDF杂志

    下载了一些PDF的杂志,想着要是全屏双页显示,应该是很爽的,但是,下载了应该foxit reader,还是遇到一些问题: 1.全屏:F11即可 2.全屏后不双页:在选项中,"全屏" ...

  2. 实现一个类似Chrome新功能提示的popoup

    先让我们看一下Chrome的popup是什么样的: 这个“直接搜索网页”与“在打开的标签页之间切换”就是两个功能导航,还做了一个动画效果,会不停的上下晃. 我通过WindowManager的addVi ...

  3. HDU4300-Clairewd’s message(KMP前缀匹配后缀)

    Clairewd's message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. Patterns-Proxy

    http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问 ...

  5. ubuntu执行级别,设置单用户模式

    redhat的runlevel级别定义例如以下:   0:关机.不能将系统缺省执行级别设置为0,否则无法启动. 1:单用户模式.仅仅同意root用户对系统进行维护. 2:多用户模式.但不能使用NFS( ...

  6. 使用万网+阿里云服务器(Apache)配置二级域名

    1. 在万网域名解析中添加二级域名解析配置    在下面的主机记录(RR)的栏位添加二级域名名称后点确定按钮即可.     注:需要等一段时间才能生效,请留意万网域名解析列表的生效状态栏位. 2. 在 ...

  7. Discuz管理员前台正常后台登录不进如何解决

    Discuz管理员前台可以登录后台无法登录的解决方法步骤如下 1. 取消ip认证 config_global.php 中找到 $_config['admincp']['checkip'] = 0 2. ...

  8. C#:列表视图操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  9. Linux两块4TB的数据磁盘创建8TB的Raid0

    分区表MBR与GPT的说明: MBR:主引导记录,是传统的分区机制,应用于绝大多数使用BIOS的PC设备,MBR+BIOS,MBR支持32位和64位系统,支持的分区数量有限,MBR只支持不超过2T的硬 ...

  10. Python 爬虫实例(5)—— 爬取爱奇艺视频电视剧的链接(2017-06-30 10:37)

    1. 我们找到  爱奇艺电视剧的链接地址 http://list.iqiyi.com/www/2/-------------11-1-1-iqiyi--.html 我们点击翻页发现爱奇艺的链接是这样的 ...