Web站点崩溃的原因有哪些?(2)
发布时间:2012-02-25 19:44:03
线程死锁
由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续下去,这样就不难理解为何会发生死锁现象了。
解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。由于使用Java进行线程编程比使用C容易,所以Java程序员中使用线程的人数更多,线程死锁也就越来越普遍了。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。
如果程序使用了永久锁,比如锁文件,而且程序结束时没有解除锁状态,则其他进程可能无法使用这种类型的锁,既不能上锁,也不能解除锁。这会进一步导致系统不能正常工作。这时必须手动地解锁。
服务器超载
NetscapeWeb服务器的每个连接都使用一个线程。NetscapeEnterpriseWeb服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分布到其它的Web服务器上,这可能会致使这些服务器一个接一个地用光所有的线程。这样一来,整个服务器组都会被挂起。操作系统级别可能还在不断地接收新的连接,而应用程序(Web服务器)却无法为这些连接提供服务。用户可以在浏览器状态行上看到connected(已连接)的提示消息,但这以后什么也不会发生。
解决问题的一种方法是将obj.conf参数RqThrottle的值设置为线程数目之下的某个数值,这样如果越过RqThrottle的值,就不会接收新的连接。那些不能连接的服务器将会停止工作,而连接上的服务器的响应速度则会变慢,但至少已连接的服务器不会被挂起。这时,文件描述符至少应当被设置为与线程的数目相同的数值,否则,文件描述符将成为一个瓶颈。
数据库中的临时表不够用
许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。
这是一个不容易被程序员发觉的问题,但会在负载测试时显露出来。但可能对于数据库管理员(DataBaseAdministrator,DBA)来说,这个问题十分明显。
此外,还存在一些其他问题:设置的表空间不够用、序号限制太低,这些都会导致表溢出错误。这些问题表明了一个好的DBA对用于生产的数据库设置和性能进行定期检查的重要性。而且,大多数数据库厂商也提供了监控和建模工具以帮助解决这些问题。
另外,还有许多因素也极有可能导致Web站点无法工作。如:相关性、子网流量超载、糟糕的设备驱动程序、硬件故障、包括错误文件的通配符、无意间锁住了关键的表。


猜你喜欢
- MySQL5安装图解本文讨论的是Windows2003下安装MySQL5,请注意下载MySQL安装文件,下载地址:点此下载MySQL5.5.
- 这些天,中国版的谷歌图片搜索进行了重大的改版,最终图片的显示页面抛弃了原有的框架设计界面,而采用类似百度图片搜索的直接显示图片的界面。与百度
- 1. AdSense 收入 = 广告展示次数 x 点击率 x 点击单价 x 智能定价因素(Smart Price)2. 广告展示次数基于你的
- 据BizReport报道 日前Google向他们的AdWords客户提供了新工具--活动优化者(Campaign Optimizer )。该
- 初入linux的程序员们,经常会受到乱码的问候。可谓“始乱终弃”。因为乱码,并且最终放弃了linux的不在少数。好吧,言归正传,下面来看一下
- 最近在学习 python,使用 flask 实现了个个人博客程序,完了想部署到服务器上。因为是新手,一路磕磕绊绊最终把它基本搞定。网上资料对
- Web应用服务器优化方法 在对Web服务器进行优化时要根据真实的Web应用系统的情况和特征来采取有针对性地优化方案。首先根据不同的网络特性来
- 怎么知道域名是否被注册过或被K过呢?域名的注册也是有讲究的,其中最重要的就是看域名是否被搜索引擎k过。如果域名被注册过,且网站因为涉及到法律
- Vmware12+Centos7搭建Openstack环境—网络配置一、虚拟机配置根据OpenStack官方的教程,节点的环境中比较重要的就
- 这里我们按照所需要的服务开放响应的端口。在2003系统里,不推荐用TCP/IP筛选里的端口过滤功能,譬如在使用FTP服务器的时候
- 今天上午在整理邮件的时候,看到谷奥的消息“Google Dashboard正式上线”,这样的一款服务
- 邮件服务器是一个网站所必需的服务。在这里,我们可以通过MDaemon软件来完成邮件服务器的架设。1.安装MDaemon首先,到http://
- 近日酷6网研发部一名罗姓员工不幸猝死,酷6网昨日发表正式声明,对该员工死因进行了澄清,并对事件的处理进展予以通告。随后,酷6网又向全体员工发
- 我的虚拟机总是各种连不上网,每次都要折腾一番。现在我把虚拟机连不上网的原因总体排查一下,按照流程一步步来,基本上可以解决大部分人的问题。首先
- 世上是有后悔药的,只要肯琢磨!再也不用重新创建容器了!我有一个叫m2的容器,现在想要修改它的 hostname1、查看容器配置文件在宿主机上
- demo运行在windows的docker中,系统是win10,所以需要先下载Docker for Windows,安装完毕后系统会重启,然
- 百度和google是站长们的衣食父母,而做好搜索引擎优化的第一步就是蜘蛛的抓取,以下5条简单的Linux命令可以让你清楚的了解蜘蛛的爬行情况
- RewriteEngine on # 把 yourdomain
- 据spreadfirefox的消息,Mozilla Firefox 3发布时间暨下载日终于到来了,Mozilla Firefox3于美国西部
- 一、首先把php的压缩包(这里以PHP4.3.2为例)解压到C:\php-4.3.2-Win32目录中,然后从其中找到一个叫php.ini-