这个问题是第一次在Linux环境下碰到,把解决的方法记录下来。
服务器配置:两个双核CPU 2.0G,4G内存
操作系统:CentOS,内核2.6.18
应用1、搜索服务器,负责全站的搜索和提供内容相关性接口
应用服务器:Tomcat6.0.16+Apache2.2.8,其中两个Tomcat实例,一个对外提供服务,一个对内管理索引(创建、删除、检索等)
Web方案:Solr1.3(With
Solr Client For Java)、Java Servlet(Web Service 接口)
应用2、类似于百度知道的一个应用
应用服务器:与搜索服务器共享Apache2.2.8
Web方案:Php+Mysql
问题症状:搜索服务停止,应用2响应超时,牵连全站的搜索接口调用内容的输出,查看Catalina日志,大量的如下信息:
<!--[if !supportLineBreakNewLine]-->org.apache.jk.common.ChannelSocket acceptConnections
WARNING: Exception executing accept
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:295)
at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:641)
at org.apache.jk.common.SocketAcceptor.runIt(ChannelSocket.java:852)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
<!--[endif]-->事件的主题:linux系统出现Too many open files 错误,这是因为文件描述符大小不够,或者有不正常的网络连接(Socket也是一种特殊的文件)、文件IO没有关闭并释放出文件描述符(文件句柄,File Operator)。
使用如下命令查看系统对允许打开最大文件描述符的配置:
ulimit -u 查看open files设置
ulimit -a 查看所有设置
ulimit -u 65535(新的open files 值)修改设置
ulimit -n 65536 设置用户可以同时打开的最大文件数(max open files)
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
使用lsof -p pid [httpd进程的 pid、java的pid]来查看系统中apache进程和java运行时进程当前打开的文件资源,发现两者之和已经接近1024,大于了默认的设置。
修改配置:
修改/etc/security/limits.conf,在文件末加上
* soft nofile 65536
* hard nofile 65536
系统级文件描述符极限还可以通过将以下三行添加到 /etc/rc.d/rc.local 启动脚本中来设置:
# Increase system-wide file descriptor limit.
echo 65536 > /proc/sys/fs/file-max
echo 65536 > /proc/sys/fs/inode-max
思考:虽 然调整该参数解决了当前的问题,但并不是最好的方法,出现该错误说明该服务器承载了一定的并发连接,尤其是搜索服务,其中一个实例对外提供搜索,另一个实 例创建索引,两个实例之间也使用socket进行通信(httpclient for java),创建索引的时候会占用大量的文件描述符,如果描述符没有及时释放(不能完全依赖垃圾回收机制,要及时的close);全站的所有与搜索有关的 接口调用都会向其发出请求,而应用2也对外服务不少的请求,较好的办法是将搜索服务从该服务器中分离出来,这样可以分别对两者进行优化(包括调整 Linux系统参数,比如:/etc/sysctl.conf中对net.ipv4的优化),出了问题也容易debug。
分享到:
相关推荐
### Too many open files 解决方法 #### 背景与问题描述 在将Web服务器从Windows环境迁移到Linux环境后,...通过上述解决方案,可以有效地解决“Too many open files”问题,保证Web服务器在高并发环境下的稳定运行。
Linux下运行tomcat或者was出现java.net.SocketException: 打开的文件过多错误 tomcat报“too many open files”的错误,解决办法如下:
解决tomcat中文乱码问题,有详细的解释说明,希望对需要的人有所帮助
在解决问题时,需要检查 SSL 证书文件是否正确、连接器配置是否正确、APR 模块是否正确配置等。 在解决 Tomcat 配置 SSL 错误的问题中,需要注意以下几个常见的错误: * 证书文件不存在或格式不正确 * 连接器配置...
【标题】:“Tomcat配置解决跨域问题” 在Web开发中,跨域(Cross-Origin)是一种常见的安全限制,它阻止浏览器从一个源加载资源到另一个不同的源。这主要是为了防止恶意脚本通过注入来窃取数据。然而,在进行前后...
为了解决Tomcat在IP和端口不同时引发的跨域问题,可以通过编写并配置`crossDomain.xml`文件来实现跨域支持。下面将详细介绍几种常见的配置方式: ##### 1. 允许特定域名访问 在某些情况下,可能只需要允许来自特定...
解决 Tomcat 下中文乱码问题 在本文中,我们将讨论如何解决 Tomcat 下中文乱码问题。该问题是由于 Tomcat 默认的字符编码设置不正确引起的。我们将通过设置 Connector 元素的 URIEncoding 属性和在过滤器中设置字符...
《OpenGrok与Tomcat集成安装详解》 OpenGrok是一款强大的源代码搜索引擎,它能够帮助开发者快速定位和理解源代码中的函数、变量、类等元素。而Apache Tomcat则是一个广泛使用的Java应用服务器,主要用于部署和运行...
然而,在实际应用中,Tomcat的配置和问题解决方法却是一些开发者所忽视的重要环节。本文将详细介绍Tomcat的配置方法和常见问题的解决方法。 一、配置Tomcat出现错误 在配置Tomcat时,需要配置正确的JAVA_HOME和...
标题中的“Geoserver解决Tomcat跨域问题文件”指的是针对使用Geoserver与Tomcat部署Web服务时遇到的跨域限制的解决方案。在Web开发中,跨域问题是一个常见的安全问题,它源于浏览器的同源策略,限制了JavaScript从一...
tomcat解决跨域访问问题,具体配置如下: 1、修改tomcat下的Conf/web.xml文件,在该文件内容中新增以下配置,注意,若该web.xml中存在其它filter,则需要将该filter放在所有filter前面; <filter-name>...
在IT行业中,Tomcat是一个非常重要的轻量级应用服务器,主要用来部署和运行Java Servlet以及JSP(JavaServer Pages)...在解决Tomcat问题的过程中,耐心和细心是必不可少的,因为每个细节都可能成为解决问题的关键。
描述中提到“包含tomcat6x64问题解决需要的文件以及解决步骤”,这意味着压缩包中不仅有必要的文件,还可能包括了详细的操作指南或故障排除文档,帮助用户一步步解决问题。通常,这些文件可能包括更新的JRE(Java ...
### Tomcat环境配置详解及问题处理 #### 一、Tomcat简介 ...通过以上步骤,我们可以顺利地完成Tomcat的安装和配置,以及解决常见的启动问题。如果遇到其他问题,建议查阅官方文档或社区论坛获取更多帮助。
10. **社区支持**:作为开源项目,Tomcat 8 拥有一个活跃的社区,提供了丰富的文档、教程和解决方案,遇到问题时可以获得及时的帮助。 在使用Apache Tomcat 8.5.81这个版本时,需要注意的是,每次新版本的发布通常...
jsp解决文件上传后重启Tomcat时文件自动删除问题 本文主要介绍了jsp解决文件上传后重启Tomcat时文件自动删除问题,包括问题分析和详细解决方法。该问题是指在jsp项目中上传文件后,重启Tomcat服务器或清理缓存时,...
tomcat7配置log4j解决catalina.out日志过大问题,tomcat-juli.jar,tomcat-juli-adapters.jar解决tomcat日志cataline.out过大问题
在IT行业中,Tomcat作为一款广泛应用的开源Java Servlet容器,其稳定性和易用性深受开发者喜爱。然而,如同任何复杂的软件系统,Tomcat在...同时,熟悉Tomcat的配置文件结构和Web应用的工作原理也是解决问题的关键。
- 如果上述方法仍然不能解决问题,可以进一步调整`startup.bat`中的启动参数。例如增加内存分配大小: ```bat set JAVA_OPTS=-Xms256m -Xmx512m ``` 5. **检查Tomcat日志文件**: - 查看`logs`目录下的日志...
通过上述步骤,我们可以有效地诊断并解决Tomcat无法启动的问题。值得注意的是,在实际操作过程中,还需要结合具体的错误日志信息进行更精确的定位和处理。此外,建议定期备份配置文件,以便在出现问题时能够快速恢复...