当前位置:首页 > 运维 > 正文内容

linux中浅谈端口占用和开闭管理

phpmianshi5年前 (2016-04-09)运维284

背景


平时开发或线上运维少不了跟端口打交道,今天我们简单聊聊平时跟端口相关的几个场景


首先查看某台主机某个端口服务是否正常


比如查看本机 redis服务是否正常

telnet 127.0.0.1 6379

 

如果提示如下:

Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused


则说明服务没有正常监听端口或者端口没有开放,可以用下面2中方法一一排除


查看端口是否正常监听或被谁占用(lsof netstat ss三种方法)


1. lsof指 列出打开文件(lists openfiles)。而有一点要切记,在Unix中一切(包括网络套接口)都是文件。


-i 列出所有的网络连接

 lsof -i :6379
 
 COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 redis-ser 2542 redis    6u  IPv4  19003      0t0  TCP VM_0_15_centos:6379 (LISTEN)

列出所有tcp 网络连接信息

lsof  -i tcp

更详细的用法:https://phpmianshi.com/?id=103

  

2. netstat命令

netstat -tunplp | grep 6379

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2542/redis-server 1

更详细的用法:https://phpmianshi.com/?id=105


3. ss命令

ss -a |grep 6379

tcp    LISTEN     0      511    127.0.0.1:6379                  *:*

更详细的用法:https://phpmianshi.com/?id=105


查看端口是否开放,如何开放指定端口  (这里主要讲iptables的操作,云主机的话还要登录控制台设置)


建议使用第二种方法

1. 直接命令行操作

/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
service iptables save
service iptables restart
/sbin/iptables -L -n


2. 编辑/etc/sysconfig/iptables

vi /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22022 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2100:2300 -j ACCEPT

service iptables restart
/sbin/iptables -L -n
版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

彻底弄懂502/503/504(php-fpm+nginx)亲测可用

环境 php7.3.5 + nginx1.16.0相信大家都遇到过50X的问题,网上也看了很多文章,总是各种不对,所以今天咱们详解各种出现50X的情况和原因502:Bad Gateway &...

Linux中ss命令Recv-Q和Send-Q详解

ss用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netst...

负载均衡工作模式以及工作原理

负载均衡的多种解决方案:HTTP重定向当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向。通过...

linux中连接数过多(TIME_WAIT/CLOSE_WAIT)读这一篇就够了

根据TCP/IP介绍,socket大概包含10个连接状态。我们平常工作中遇到的,除了针对SYN的拒绝服务攻击,如果有异常,大概率是TIME_WAIT和CLOSE_WAIT的问题。TIME_WAIT一般...

linux中高并发场景下too many open files问题处理

概述:高并发场景下 too many open files 问题。可以通过设置系统打开文件数,直接影响单个进程容纳的客户端连接数。比如会影响到长链接应用如聊天中单个进程能够维持的用户连接数, 运行ul...


1、应用程序中调用read() 方法,这里会涉及到一次上下文切换(用户态->内核态),底层采用DMA(direct memory access)读取磁盘的文件,并把内容存储到内核地址空间的读取缓存区。

2、由于应用程序无法读取内核地址空间的数据,如果应用程序要操作这些数据,必须把这些内容从读取缓冲区拷贝到用户缓冲区。这个时候,read() 调用返回,且引发一次上下文切换(内核态->用户态),现在数据已经被拷贝到了用户地址空间缓冲区,这时,如果有需要,应用程序可以操作修改这些内容。

3、我们最终目的是把这个文件内容通过Socket传到另一个服务中,调用Socket的send()方法,这里又涉及到一次上下文切换(用户态->内核态),同时,文件内容被进行第三次拷贝,被再次拷贝到内核地址空间缓冲区,但是这次的缓冲区与目标套接字相关联,与读取缓冲区没有半点关系。

4、send()调用返回,引发第四次的上下文切换,同时进行第四次的数据拷贝,通过DMA把数据从目标套接字相关的缓存区传到协议引擎进行发送。

"在整个过程中,过程1和4是由DMA负责,并不会消耗CPU,只有过程2和3的拷贝需要CPU参与


如果在应用程序中,不需要操作内容,过程2和3就是多余的,如果可以直接把内核态读取缓存冲区数据直接拷贝到套接字相关的缓存区,是不是可以达到优化的目的?

Linux中nio的实现原理

我们上一篇文章 《linux中netstat和ss命令详解》中提到了nio 原文:https://phpmianshi.com/?id=105有一些小伙伴私信想了解什么是nio,我们这篇详细介绍下什么...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。