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 ...
随机推荐
- 让 Ubuntu 桌面自动更换壁纸
引言 让我们的桌面系统自动更换壁纸是一个很常见的美化需求,而且确实也存在着不少这方面的小软件可以实现这个功能.事实上,在基于 Gnome 的桌面系统中,我们可以不需要借助任何第三方软件的帮助来让我们的 ...
- C#中,双屏/两屏/三屏/多屏跳转判断
之前伤脑筋写过一次在Web中,JS,ActiveXObject去读取显示器数量.分辨率去判断单双屏跳转. 那么在客户端中,用C#去读取硬件信息,更方便更容易! 思路参考代码: ) { //此显示器是否 ...
- [Java]Java日期及时间库插件 -- Joda Time.
来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...
- 扎克伯格开发的家用AI: Jarvis
扎克伯格本周二在facebook发布了一篇文章,介绍自己利用个人时间开发的一套在自己家里使用的AI系统,并将它命名为Jarvis,对!就是电影钢铁侠里的AI助手Jarvis. 文章并没有讲细节的技术c ...
- eclipse 突然 一直在loading descriptor for XXX (XXX为工程名)Cancel Requested
问题: eclipse 启动后,啥也不干,就一直在loading descriptor for XXX (XXX为工程名),,其他什么操作都不能操作. 如下图所示,保存文件也无法保存. 这个怎么办? ...
- 更改默认alert框体
更改框体主要用到的是更改系统的内置控件winpop下面是winpop具体代码 (function(window, jQuery, undefined) { 2 3 var HTMLS = { 4 ov ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
系列目录 系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的.系统的异常需要被捕获,而不是将系统出错显示 ...
- 7.JAVA之GUI编程鼠标事件
鼠标事件: 功能: 1.基本窗体功能实现 2.鼠标移动监听,当鼠标移动到按钮上时,触发打印事件. 3.按钮活动监听,当按钮活动时,触发打印事件. 4.按钮被单击时触发打印事件. 源码如下: impor ...
- 浅玩JavaScript的数据类型判断
前言 平常在需要进行类型判断时,随手拿起typeof就像手枪一样只管突突突...也没有仔细的去了解它的具体特性. 所以这里就利用空闲时间,来做一个较为详细的了解. 首先我们来全面看一遍typeof类型 ...
- LINQ to SQL语句(6)之Group By/Having
适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in db.Products group ...