Tomcat报异常:Too many open files 的解决之路
http://www.linuxeye.com/Linux/2781.html
Tomcat报 Jul 21, 2015 8:45:23 AM org.apache.tomcat.util.net.JIoEndpoint$Acceptor runSEVERE: Socket accept failedjava.net.SocketException: Too many open filesat java.net.PlainSocketImpl.socketAccept(Native Method)at java.net.AbstractPlainSoc
|
Tomcat报 Jul 21, 2015 8:45:23 AM org.apache.tomcat.util.net.JIoEndpoint$Acceptor run 解决的思路: ulimit -a 查看Linux内核允许的最大资源 open files (-n) 1024 需要调大限制 ulimit -n 65535 经过观察,问题依旧... 通过 lsof|grep tomcat|wc -l 看到tomcat的io居然有1082个,立马想到了nginx与tomcat的不协调造成的,据网络资料显示:tomcat端默认开启了 keepalive,而nginx把连接交给了tomcat并不关系是否关闭,因此tomcat需要等待"connectionTimeout"设置的超 时时间来关闭,所以最好设置“maxKeepAliveRequests”为1,让每个连接只相应一次就关闭,这样就不会等待timeout了。因此设置 tomcat: <Connector port="8080" protocol="HTTP/1.1" 重启tomcat,观察,问题依旧! 翻页查看lsof lsof|grep tomcat|more 发现有大量的memcached的IO,因此把问题定位在memcached上,为了方便观察,新建memcached实例,发现memcached的IO数量逐步增加,最终导致tomcat崩溃! 通过code review,发现每次调用memcached的API,都会new一个XMemcachedClient(一个memcached客户端),每次new的时候都会设置一个尺寸的连接池,而连接是预建立的,因此导致memcached的IO数目剧增。 问题终于解决了,memcached的IO数目稳定了,tomcat也运行良好。。。 不经意间,发现memcached的IO数目以连接池的尺寸在递增,心里一落千丈,拔凉拔凉的,貌似还是没解决! 查看tomcat的日志,发现了端倪: Jul 21, 2015 3:06:40 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 原来在每次重新部署webapp时,tomcat杀不掉XmemcachedClient的连接进程,由于使用的是spring,所以需要在memcachedClient的bean里增加"destroy-method"。 <listener> 经过一天的推理、怀疑、实验、否定,终于搞定,又过了一次"福尔摩斯"的侦探瘾,作此标记,留给后来人! 今天发现打开的IO仍然在增加,虽然幅度比较少,但最高也达到了960+,因此需要优化Tomcat配置,增加线程池,并配置keepAliveTimeout和maxKeepAliveRequests <Executor name="mobileThreadPool" namePrefix="catalina-exec-" 今天使用压力测试,依然出现“Too many open files”,使用ulimit发现“open files (-n)”仍然是1024,那么之前设置的65535是没起作用,而切换到root用户发现却是65535;而在非root用户下 ulimit -n 65535 会报异常: ulimit: max user processes: cannot modify limit 原来是被 /etc/security/limits.conf 限制了,打开此文件即可看到,对默认用户是有限制的,因此可以加入 * soft noproc 65535 这样就非root用户就可以设置ulimit为65535了。 设置了ulimit后,我在root下启动tomcat,压力还会容易出现“Too many open files”,但其实使用“lsof -u root|wc -l”并不多,才3000+;root后来我单独建立了个用户来启动,暂时没出现问题。 PS: /proc/sys/fs/file-max表示kernel中维护的最大文件描述符数目。不管这个系统上有多少了用户登录,有多少个进程在运行,所有打开的文件数目总合都不能超过这个数字。 /etc/security/limit.conf用来设置每个用户最多可以打开的文件数目。 普通用户可以通过ulimit -n 命令来设置hard limit(只能改小) 和soft limit(可以改大和改小). 把上面的内容概括成3条就是:
转载请保留固定链接: http://www.linuxeye.com/Linux/2781.html |
Tomcat报异常:Too many open files 的解决之路的更多相关文章
- 启动Tomcat报异常host-manager does not exist or is not a readable directory
前几天重新安装了Tomcat6,安装完Tomcat6后在wepapps下面会有一些tomcat自带的项目(root.manager.host- manager等几个),这几天项目没什么用我就删掉了,后 ...
- tomcat报异常Invalid character found in method name. HTTP method names must be tokens
最近监控了一下测试环境的日志,突然出现如下一个异常 由Error parsing HTTP request header可以看出是由于解析请求头出错导致的,但是它属于DEBUG级别的异常,虽然不影响系 ...
- eclipse中同步代码PULL报错checkout conflict with files的解决方法
1.Team--->Synchronize Workspace 2.在同步窗口找到冲突文件,把自己本地修改的复制出来 3.在文件上右键选择 Overwrite----->Yes , 4.再 ...
- 记一次Tomcat无法正常启动的查错与解决之路
使用LombozEclipse运行某Web应用,结果总是404. 换另一个Eclipse运行,还是404. 换Tomcat到更高版本,还是404. 直接启动Tomcat,闪退. 用重定向拦截输出,可惜 ...
- eclipse 启动tomcat报Spring错误 Error creating bean with name 'serviceOrderBiz': Injection of autowired dependencies failed
启动tomcat报异常,提示Sring无法创建serviceOrderBiz(第一行红字),继续看是因为有一个自动注入的字段无法注入ModuleInterfaceBiz(第二行红字),检查servic ...
- 启动Tomcat报WEB-INF\lib\j2ee.jar jar not loaded异常的解决办法
今天加载工程时突然发现Tomcat报: 2010-7-1 12:11:38 org.apache.catalina.loader.WebappClassLoader validateJarFile 信 ...
- 启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration.
启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration. 出现此异常是因为,str ...
- 启动tomcat报host-manager does not exist or is not a readable directory异常
新安装了一个tomcat6,安装完之后在webapps下面会有一些tomcat自带的项目(ROOT.manager.host-manager...) 把这些没用的项目删掉之后,启动tomcat 报如下 ...
- 【转】Eclipse下启动tomcat报错:/bin/bootstrap.jar which is referenced by the classpath, does not exist.
转载地址:http://blog.csdn.net/jnqqls/article/details/8946964 1.错误: 在Eclipse下启动tomcat的时候,报错为:Eclipse下启动to ...
随机推荐
- 论文阅读:Deep Attentive Tracking via Reciprocative Learning
Deep Attentive Tracking via Reciprocative Learning 2018-11-14 13:30:36 Paper: https://arxiv.org/abs/ ...
- Macro-Micro Adversarial Network for Human Parsing
Macro-Micro Adversarial Network for Human Parsing ECCV-2018 2018-10-27 15:15:07 Paper: https://arxiv ...
- codeforce 955c --Sad powers 思路+二分查找
这一题的题意是 定义一个数,该数特点是为a的p次方 (a>0,p>1) 再给你n个询问,每个询问给出一个区间,求区间内该数的数目. 由于给出的询问数极大(10e5) 所以,容易想到应该 ...
- mysql57 centos7 使用
####### yum repository install #######mysql yum repo http://repo.mysql.com/wget http://repo.mysql.co ...
- SpringMVC 拦截器HandlerInterceptor(一)
HandlerInterceptor 接口: 进入 Handler方法之前执行比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行 boolean preHandle(HttpS ...
- Jfinal集成Spring
JFinal框架也整合了spring框架,下面实现JFinal怎么去配置Spring框架.在JFinal中整合Spring使用到的类是SpringPlugin和IocInterceptor类 Spri ...
- android -------- OkGo (让网络请求更简单的框架)
项目地址:https://github.com/jeasonlzy 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用.支持大文件上传下载,上传进度回调,下载 ...
- yii2常用路径获取
public function actionGetUrlList() { echo "当前域名地址:".Yii::$app->request->hostInfo.&qu ...
- vue-router中query和params传参(接收参数)以及$router、$route的区别
query传参: this.$router.push({ path:'/...' query:{ id:id } }) 接收参数:this.$route.query.id params传值: 传参: ...
- 【转】阿里云免费SSL证书申请与安装使用(IIS7)
阅读目录 准备: 第一步:免费SSL证书申请 第二步:证书导入 第三步:分配服务器证书 最后一步:访问测试 回到顶部 准备: 阿里云已完成备案的域名一个 回到顶部 第一步:免费SSL证书申请 登陆阿里 ...