web站点崩溃的原因大全

有许多种原因可能导致Web站点无法正常工作,这使得系统地检查所有问题变得很困难。下面将集中分析总结导致Web站点崩溃的最常见的问题。如果可以解决这些常规问题,那么也将有能力对付出现的一些意外情况。
  磁盘已满
  导致系统无法正常运行的最可能的原因是磁盘已满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。
  日志文件会很快用光所有的磁盘空间。Web服务器的日志文件、SQL*Net的日志文件、JDBC日志文件,以及应用程序服务器日志文件均与内存泄漏有同等的危害。可以采取措施将日志文件保存在与操作系统不同的文件系统中。日志文件系统空间已满时Web服务器也会被挂起,但机器自身被挂起的几率已大大减低。
  C指针错误
  用C或C++编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引用指针(即,访问指向的内存)中出现一个错误,就会导致操作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但使用Java对可靠性进行额外的度量则会对性能产生一些负面影响。
  内存泄漏
  C/C++程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要操作系统还在运行中,则进程就会一直使用该内存。这样的结果是,曾占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。
  解决方案之一是使用代码分析工具(如Purify)对代码进行仔细分析,以找出可能出现的泄漏问题。但这种方法无法找到由其他原因引起的库中的泄漏,因为库的源代码是不可用的。另一种方法是每隔一段时间,就清除并重启进程。Apache的Web服务器就会因这个原因创建和清除子进程。
  虽然Java本身并无指针,但总的说来,与C程序相比,Java程序使用内存的情况更加糟糕。在Java中,对象被频繁创建,而直到所有到对象的引用都消失时,垃圾回收程序才会释放内存。即使运行了垃圾回收程序,也只会将内存还给虚拟机VM,而不是还给操作系统。结果是:Java程序会用光给它们的所有堆,从不释放。由于要保存实时(Just In Time,JIT)编译器产生的代码,Java程序的大小有时可能会膨胀为最大堆的数倍之巨。
  还有一个问题,情况与此类似。从连接池分配一个数据库连接,而无法将已分配的连接还回给连接池。一些连接池有活动计时器,在维持一段时间的静止状态之后,计时器会释放掉数据库连接,但这不足以缓解糟糕的代码快速泄漏数据库连接所造成的资源浪费。
  进程缺乏文件描述符
  如果已为一台Web服务器或其他关键进程分配了文件描述符,但它却需要更多的文件描述符,则服务器或进程会被挂起或报错,直至得到了所需的文件描述符为止。文件描述符用来保持对开放文件和开放套接字的跟踪记录,开放文件和开放套接字是Web服务器很关键的组成部分,其任务是将文件复制到网络连接。默认时,大多数shell有64个文件描述符,这意味着每个从shell启动的进程可以同时打开64个文件和网络连接。大多数shell都有一个内嵌的ulimit命令可以增加文件描述符的数目。
  线程死锁
  由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续下去,这样就不难理解为何会发生死锁现象了。
  解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。由于使用Java进行线程编程比使用C容易,所以Java程序员中使用线程的人数更多,线程死锁也就越来越普遍了。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。
  如果程序使用了永久锁,比如锁文件,而且程序结束时没有解除锁状态,则其他进程可能无法使用这种类型的锁,既不能上锁,也不能解除锁。这会进一步导致系统不能正常工作。这时必须手动地解锁。
  服务器超载
  Netscape Web服务器的每个连接都使用一个线程。Netscape Enterprise Web服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分布到其它的Web服务器上,这可能会致使这些服务器一个接一个地用光所有的线程。这样一来,整个服务器组都会被挂起。操作系统级别可能还在不断地接收新的连接,而应用程序(Web服务器)却无法为这些连接提供服务。用户可以在浏览器状态行上看到connected(已连接)的提示消息,但这以后什么也不会发生。
  解决问题的一种方法是将obj.conf参数RqThrottle的值设置为线程数目之下的某个数值,这样如果越过RqThrottle的值,就不会接收新的连接。那些不能连接的服务器将会停止工作,而连接上的服务器的响应速度则会变慢,但至少已连接的服务器不会被挂起。这时,文件描述符至少应当被设置为与线程的数目相同的数值,否则,文件描述符将成为一个瓶颈。
  数据库中的临时表不够用
  许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。
  这是一个不容易被程序员发觉的问题,但会在负载测试时显露出来。但可能对于数据库管理员(DataBase Administrator,DBA)来说,这个问题十分明显。
  此外,还存在一些其他问题:设置的表空间不够用、序号限制太低,这些都会导致表溢出错误。这些问题表明了一个好的DBA对用于生产的数据库设置和性能进行定期检查的重要性。而且,大多数数据库厂商也提供了监控和建模工具以帮助解决这些问题。
  另外,还有许多因素也极有可能导致Web站点无法工作。如:相关性、子网流量超载、糟糕的设备驱动程序、硬件故障、包括错误文件的通配符、无意间锁住了关键的表。

(0)

相关推荐

  • web站点崩溃的原因大全

    有许多种原因可能导致Web站点无法正常工作,这使得系统地检查所有问题变得很困难.下面将集中分析总结导致Web站点崩溃的最常见的问题.如果可以解决这些常规问题,那么也将有能力对付出现的一些意外情况. 磁盘已满 导致系统无法正常运行的最可能的原因是磁盘已满.一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带). 日志文件会很快用光所有的磁盘空间.Web服务器的日志文件.SQL*Net的日志文件.JDBC日志文件,以及应用程序服务器日志文件

  • iis Web站点崩溃的原因分析

    有许多种原因可能导致Web站点无法正常工作,这使得系统地检查所有问题变得很困难.下面将集中分析总结导致Web站点崩溃的最常见的问题.如果可以解决这些常规问题,那么也将有能力对付出现的一些意外情况.  磁盘已满 导致系统无法正常运行的最可能的原因是磁盘已满.一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带). 日志文件会很快用光所有的磁盘空间.Web服务器的日志文件.SQL*Net的日志文件.JDBC日志文件,以及应用程序服务器日志文

  • 网站导致浏览器崩溃的原因总结(多款浏览器) 推荐

    面试某公司的时候,面试官问到,导致浏览器崩溃的原因有哪些?愚辈不才,仅回答出了内存泄漏.其实在网页在装载的过程中,常常由于种种原因使浏览器的反映变的很慢,或造成浏览器失去响应,甚至会导致机器无法进行其他的操作. 对于访客,如果登录您网站,浏览器就立刻崩溃,我想这对谁都是无法容忍的,对此总结了网站导致浏览器崩溃的原因: 1. 内存泄漏 还是先谈下内存泄漏,网站由于内存泄漏的而照成崩溃有两种情况,服务器的崩溃和浏览器的崩溃.内存泄漏所造成的问题是显而易见的,它使得已分配的内存的引用就会丢失,只要系统

  • 单台服务器中利用Apache的VirtualHost如何搭建多个Web站点详解

    前言 本文将详细记录一下如何在单台服务器上,利用apache的virtualhost(虚拟主机)来搭建多个不同的web站点,并且每个站点独立管理自己的session,下面话不多说了,来一起看看详细的介绍吧. 开发环境 先说下我各项开发环境参数: 操作系统: RedHat6.7(CentOS) WEB服务器:apache2.2 php5.6.30 修改Apache配置 apache2.2 的配置文件路径在 /etc/httpd/conf/httpd.conf 我们用下面的命令修改apache的配置

  • Win2003灵活实现多Web站点的设置方法[图文]

    一.建立虚拟主机 那么一个服务器上有两个网站,用户如何访问这两个网站呢?可以有三种方法. 1>两个网站使用不同的IP地址.这样用户在访问第一个网站需在浏览器中输入http://192.168.100.1,访问第二个网站需在浏览器中输入http://192.168.200.1.(假设的) 2>两个网站使用相同的IP,但使用不同的端口号.这样用户在访问第一个网站时需在浏览器中输入http://192.168.100.1,访问第二个网站时需在浏览器中输入http://192.168.100.1:81

  • 改进Web站点性能的五个方面

    对一个电子商务网站来说,需要运用最少的带宽和服务器资源,为更多的客户提供更快捷的服务.而用户对Web站点的满意度,主要以访问速度来衡量. 从用户角度来说,Web站点只有"快"和"慢"之分:用户往往并不要求实现大容量数据传输,而是希望网站在保证性能的同时,能够容纳更多的访问者.Web用户所关心的问题的实质是访问时间.从网络维护角度说,导致时延的潜在因素是多方面的,大致来讲,可以从5个方面改进Web站点的性能:缓冲.压缩.CPU优化.运用内容分发网络(CDN)及客户端软

  • 采用XHTML和CSS设计可重用可换肤的WEB站点的方法第1/4页

    XHTML 标准的目标是取代 html.按照 W3C 的说法,"XHTML 是 html 的继承者"(http://www.w3.org/MarkUp/). XHTML具有两大目标: 在文档结构和表示形式之间创建更明显的分离. 将 html 重新表示为 XML 的应用程序. 使用XHTML标准的好处是:只需设计页面一次,即可让该页以完全相同的方式在任何现代的浏览器中显示和工作.例如,在按照标准生成以后,页面在Internet Explorer.Mozilla Firefox.Netsc

  • Python 搭建Web站点之Web服务器与Web框架

    之前用 Django 做过一个小的站点,感觉Django太过笨重,于是就准备换一个比较轻量级的 Web 框架来玩玩.Web.py 作者已经挂掉,项目好久没有更新,所以不准备用它.而 Flask 也是一个成熟的轻量级 Web 框架,在 github 上有众多的 Star 和 Fork,文档和扩展也很丰富,值得学习. 学习一个框架最好的方式就是用框架做一个项目,在实战中理解掌握框架.这里我用 Flask 框架,使用 Mysql 数据库做了一个 论坛系统 .麻雀虽小,五脏俱全,论坛效果图如下: 论坛系

  • Python 搭建Web站点之Web服务器网关接口

    在 Python 搭建Web站点之Web服务器与Web框架 中我们弄清楚了Web 服务器.Web 应用程序.Web框架的概念.对于 Python 来说,越来越多的 Web 框架面世,在给我们更多选择机会的同时,也限制了我们对于 Web Server 的选择.同样是有着很多 Web 框架的Java,因为有着 servlet API 的存在,任何Java Web框架写的应用程序都可以运行在任意一个 Web Server 上. Python 社区当然也需要这样一套 API,来适配Web服务器和应用程序

  • asp.net Web站点风格切换的实现

    Web站点风格切换的实现 引言 Web站点的风格切换是很常见.也很受大家欢迎的功能,比如大家熟知的博客园就提供了几十款风格模板供大家选择.在Asp.Net中,我们可以通过模板页master page和主题theme来实现网站的风格切换,但是.Net提供的默认设置不够强大和灵活.本文将向大家介绍如何在.Net提供的方法上进行改进和扩展,以提供更加强大的网站风格切换功能. 效果预览:http://www.tracefact.net/Demo/StyleSetting/default.aspx NOT

随机推荐