nginx端口占用案例分享
这里分享一个案例,问题的原因是反向代理使用不当。
现象
首先描述一下问题的现象。当时的问题是应用启动失败,日志里面报错显示端口占用。我们的应用都是通过脚本发布的,之前发布过多次都没有出现过问题。那么同样的脚本、同样的机器,这次怎么就发布失败了呢?
报错信息如下:
OSError: [Errno 48] Address already in use
问题排查
这个报错是很常见的,以为是发布的过程中上一个应用没有正常关闭。然后熟练的打开终端,连接到服务器,通过netstat -ant|grep LISTEN命令检查这个端口被谁占用了。这条命令的输出如下:
tcp 0 0 0.0.0.0:53130 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:39308 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:46429 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:51329 0.0.0.0:* LISTEN
tcp6 0 0 0.0.0.0:2280 :::* LISTEN
我们的服务使用8080端口。于是熟练的在输出的内容里寻找8080。可是并没有找到!
看来这次情况跟以往不太一样了。怎么会这样呢?既然没有端口占用,为什么应用会起不来?于是我再次尝试启动应用,还是报了相同的错误。
转机
既然这样,那么我直接搜索8080试试,于是输入了下面的命令:
netstat -ant | grep 8080
很快,得到了下面的结果:
tcp 0 0 192.168.6.55:59580 192.168.6.55:8080 TIME_WAIT
居然出现了TIME_WAIT。在我的三观里TIME_WAIT只会出现在断开连接的时候啊,监听端口是不会出现TIME_WAIT的。这是要打破三观的节奏吗?
真相
真相只有一个。我让运维借用sudo权限看看这个连接是哪个进程的。最后发现这个端口是被nginx占用的。原来,nginx接收了很多请求,进行代理的时候发起tcp连接,这时会占用一个未被使用的随机端口。而后端应用和nginx部署在同一台机器,由于请求过多,nginx发起了大量连接,每个连接都是短连接,占用了大量的随机端口,并且需要经过30秒的TIME_WAIT状态才能释放占用。碰巧把后端应用的8080端口也占用了,导致应用无法启动。
结论
不要把nginx和后端应用部署在同一台机器。会有一定几率导致后端应用的端口被占用。
nginx端口占用案例分享的更多相关文章
- Nginx端口占用问题
错误信息:nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use) 主要是端口被占用 ...
- 解决nginx端口占用问题
1.键入命令:netstat -ano | findstr 80 查看80端口被哪个程序占用: 2.键入命令:netsh http show servicestate 查看http服务状态(注:解决后 ...
- [移动云计算开发 01] 解决 windows 7 安装设置 nginx 出现端口占用的问题
一开始 到nginx官网 http://nginx.org/en/download.html 下载 1.4.2版本,解压安装到自己希望设置的文件夹即可, 但是打开localhost却出现了 “NOT ...
- Office 2010 KMS激活原理和案例分享
Office 2010 KMS激活原理和案例分享 为了减低部署盗版(可能包含恶意软件.病毒和其他安全风险)的可能性,Office 2010面向企业客户推出了新的批量激活方式:KMS和MAK.这 ...
- [linux]查看linux下端口占用
netstat netstat -an | grep 23 (查看是否打开23端口) 查看端口占用情况的命令:lsof -i [root@www ~]# lsof -i COMMAND PID USE ...
- Windows下查看端口占用
最近在重新安装Mysql的时候,发现3306默认端口被占用了.类似的情况常常遇到,想查看到底是哪个程序把这个端口占用了. 下面是我google找到的方法,和大家分享. 1. 首先,使用netstat ...
- Office 2010 KMS激活原理和案例分享 - Your Office Solution Here - Site Home - TechNet Blogs
[作者:葛伟华.张玉工程师 , Office/Project支持团队, 微软亚太区全球技术支持中心 ] 为了减低部署盗版(可能包含恶意软件.病毒和其他安全风险)的可能性,Office 2010面向企 ...
- 查看Linux下端口占用情况的命令
在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...
- 老李案例分享:MAT分析应用程序服务出现内存溢出过程
老李案例分享:MAT分析应用程序服务出现内存溢出过程 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loa ...
随机推荐
- Angular移除不必要的$watch之性能优化
双向绑定是Angular的核心概念之一,它给我们带来了思维方式的转变:不再是DOM驱动,而是以Model为核心,在View中写上声明式标签.然后,Angular就会在后台默默的同步View的变化到Mo ...
- .NET中使用Redis (二)
很久以前写了一篇文章 .NET中使用Redis 介绍了如何安装Redis服务端,以及如何在.NET中调用Redis读取数据.本文简单介绍如何设计NoSQL数据库,以及如何使用Redis来存储对象. 和 ...
- [源码]Literacy 快速反射读写对象属性,字段
Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...
- 解析大型.NET ERP系统 设计异常处理模块
异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性.下面从我理解的角度,谈谈异常处理的方方面面.我的设计仅仅限定于Windows Forms,供参考. 1 定义异常类型 . ...
- jquery.fn.extend与jquery.extend--(初体验二)
1.jquery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jquery.fn.extend(object);给jQuery对象添加方法. $.extend({ a ...
- AngularJS开发指南11:AngularJS的model,controller,view详解
model model这个词在AngularJS中,既可以表示一个(比如,一个叫做phones的model,它的值是一个包含多个phone的数组)对象,也可以表示应用中的整个数据模型,这取决于我们所讨 ...
- Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...
- Java多种方式动态生成doc文档
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5280272.html 本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在An ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- FFmpeg学习1:视频解码
在视频解码前,先了解以下几个基本的概念: 编解码器(CODEC):能够进行视频和音频压缩(CO)与解压缩(DEC),是视频编解码的核心部分. 容器/多媒体文件(Container/File):没有了解 ...