磁盘已满
导致系统无法正常运行的最可能的原因是磁盘已满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。
日志文件会很快用光所有的磁盘空间。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站点无法工作。如:相关性、子网流量超载、糟糕的设备驱动程序、硬件故障、包括错误文件的通配符、无意间锁住了关键的表。
发表评论
-
控制台SESSIONOUT
2010-09-17 13:04 1131通过配置文件来修改WAS控制台Session过期时间的方法 ... -
SOCKET 异常类型
2010-03-30 16:42 1736Error code Meaning ... -
Transaction Introduce
2010-03-30 14:01 1111Transaction 什么是Transaction? ... -
DB2 死锁
2010-03-26 10:33 4213解决“SQL0911N 因为死锁 ... -
WAS 事物引起的错误
2010-03-25 17:13 2457一、性能故障的现 ... -
案例分析
2010-03-16 16:53 1583系统上线后偶有宕机, ... -
Remote Rendering portlet hangs on socketRead0()
2010-03-16 16:46 1935当我们在JAVACORE文件中发现很多WEBCONTAINER ... -
WAS Portal Theme Development And Configuration
2010-03-12 22:37 1296我们先介绍一下主题和 ... -
Portal 主题部署
2010-03-12 22:21 1368部署定制的主题和外 ... -
WAS 中Too many open files问题
2010-03-11 22:16 1254WAS下的应用系统,在对其他性能开至较大时出现系统无法返回的情 ... -
急性者的性能优化
2010-03-05 11:02 877引言 如果您是这样一个人:启动并运行 WebSphere ... -
控制台安全性破解
2010-03-04 23:05 946常在河边走,哪有不湿鞋,WebSphere管理中最让人 ... -
查看WAS版本
2010-03-04 22:39 2611一、查看WAS版本的方式:1、命令行 cd $WAS_HOM ... -
WAS设置编码方式
2010-03-04 22:29 4362当安装了webSphere的小型机的默认编码不是GBK ... -
WAS 6.1 的类加载四
2010-03-04 12:35 108712.5.2 步骤 2:添加一个EJB模块和工具JAR ... -
WAS的类加载机制三
2010-03-04 12:34 141112.3.1 类加载策略 ... -
WAS的类加载机制二
2010-03-04 12:33 89312.2 概览Websphere 类加载器 注意:每一个 ... -
WAS的类加载机制一(包含JVM的类加载机制.转载)
2010-03-04 12:29 1074abstract:本文截取IBM 红皮书《WebSpher ...
相关推荐
* 造成系统频繁重启的原因包括计算机病毒或木马和其他恶意程序入侵、服务器所随的工作负荷超出服务器的性能配置、服务器硬件的稳定性能不佳、服务器系统、应用软件程序和硬件驱动出了问题等。 * 解决方法包括先杀...
6. 错误处理:通过onerror语句可以处理脚本运行中出现的错误,resumenext关键字使得在发生错误后脚本跳过错误继续执行。 7. 复制文件夹操作:文件中介绍了一个XCopy函数,可以递归复制文件夹及其子目录下的所有文件...
《比的应用》教学设计与简析汇编.doc
通过虚拟化技术,企业可以将一台高性能服务器划分为多个独立的虚拟机(VM),每个虚拟机可以运行不同的应用系统,同时保证数据备份和恢复的便捷性。 在安装XenServer时,首先需要准备的是一款兼容的服务器硬件,...
电气设备故障原因简析标准范本.pdf
北斗卫星导航系统应用简析 一、 北斗卫星导航系统概述 二、 行业应用领域 三、 企业应用领域 四、 个人应用领域
20世纪60年代美国学生运动原因简析.doc
《构建微服务云原生应用:Staffjoy微服务实现简析》 在现代软件开发领域,微服务架构已经成为构建可扩展、高可用性系统的重要手段。Staffjoy 是一个基于微服务设计的云原生应用程序,它展示了如何有效地利用微服务...
本文将对国外一些经典的LBS应用案例进行简要分析,从中探讨其对传统社交网络的革新作用、以及这些应用的特点和潜在价值。 首先,LBS技术为社交网络注入了新的活力。社交网络在互联网空间内构建了一种虚拟的社交体系...
二极管的应用范围很广泛,只要是由于二极管具有单向导电性,所以利用二极管可以进行整流、限幅、保护、检波、钳位及开关电路等,下面主要介绍二极管在几个方面的应用。 1.整流电路整流电路就是利用二极管单向导电...
简析Excel在办公中的基本应用.pdf
对于大多数服务器应用,SCSI硬盘(如采用最新Ultra320 SCSI控制器的)是优选,因其性能优异。而SATA硬盘则适合于低端小型服务器,尤其是支持热插拔和接口扩展性的场景。在实际部署中,还需要根据硬盘的转速、单碟...
《JAVA几个常见错误简析》 在Java编程中,错误处理是开发者必须面对的重要环节。本文主要分析了Java中常见的空指针异常(NullPointerException),这是许多初学者和经验丰富的开发者都可能遇到的问题。了解这些错误...
在Android系统中,相机(Camera)是一个至关重要的组件,它不仅允许用户捕获照片和录制视频,而且在许多应用程序中起到核心作用。Android Camera架构及其应用涵盖了从硬件接口到应用程序编程接口(API)的多个层次,...
1.收音机检波电路收音机检披电路的任务是将465kHz 中频调幅信号还原为音频信号。图14-7 为两种常用的收音机检披电路,中频电路采用PNP 型半导体二极管时.其检波电路如图14-7 (a) 所示;采用NPN 型半导体二极管时,其...
家园共育模式在幼儿教育中的应用简析
简析美国宪法的特点及其原因.zip
Android Camera架构及应用简析:目前对于各类Android系统设备,都要求具备照相拍摄功能。考虑到平台的多样性和设备型号的差异,需要开展相应的Camera系统的移植工作。在理解Android系统结构的基础上,分析了Camera在...
《建筑弱电智能化系统工程应用简析》这篇文章探讨了弱电智能化系统在建筑领域的应用及其影响因素,旨在为专业人士提供参考。弱电智能化系统是科技进步的产物,它极大地提升了建筑的运行效率和人们的生活水平。 文章...