剖析Linux网络包接收过程:掌握数据如何被捕获和分发的全过程 https://mp.weixin.qq.com/s/zyqIN3G5xwkQfa1uaU8DmQ
# 基本命令
查端口找pid netstat -anp|grep :80
pid查程序:
//查看程序完整启动命令
cat /proc/21268/cmdline
//查看程序路径
ls -l /proc/21268/exe
ps -lef|grep 21268
ps -eo pid,lstart,cmd |grep pid //程序启动时间
# 软硬限制
要知道,在linux的世界里,一切皆文件.因此要实现大的并发量的第一步,修改linux系统的文件标识符限制数,也就是文件打开数量的限制
Soft nofile:开启文件数软限制 Hard nofile:开启文件数硬限制 Soft proc:进程数软限制 Hard proc:进程数硬限制
Linux最大文件数限制的那些事 (opens new window)
vim /etc/security/limits.conf
Add inside limits.conf below 2 lines
usrename hard core unlimited
usrename soft core unlimited
$ ulimit -c unlimited
No error shall be seen after executing the command
$ulimit -Hn //查看硬件资源限制
65536
$ulimit -Sn ////软件资源限制
4096
$ps -lef|grep "kafka"
$ls /proc/<kafka pid>/fd | wc -l
# Socket Statistics
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。 ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。
#查看进程使用的socket
# ss -pl
显示所有UDP Sockets
ss -u -a
查看建立的 TCP 连接
ss -tna
使用 -p 选项查看监听端口的程序名称
ss -tlp
# dns
/etc/dhcp/dhclient.conf // Change #prepend domain-name-servers line, add the dns you want. Example: prepend domain-name-servers 1.1.1.1, 8.8.8.8; https://unix.stackexchange.com/questions/174349/what-overwrites-etc-resolv-conf-on-every-boot
# 端口TCP流量
查看某个端口的tcp连接记录:
https://serverfault.com/questions/193600/how-to-get-a-linux-network-log/193602
------------------------------------------------------
--- 通过 iptables
------------------------------------------------------
--- 创建
$iptables -I INPUT -p tcp --dport 9092 -j LOG
$tail -f /var/log/messages
--- 删除
$iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 LOG tcp -- anywhere anywhere tcp dpt:XmlIpcRegSvc LOG level warning
$iptables -D INPUT 1
--- More
iptables -A INPUT -p tcp --destination-port 9092 -j DROP
------------------------------------------------------
--- 其他
------------------------------------------------------
ss sport eq :10101
ss -tanp | grep 10101
ESTAB 0 0 172.22.16.15:10101 172.22.16.7:9092 users:(("java",pid=21268,fd=46))
ls -al /proc/21268/fd/46
# 检查网卡 network card adapter
grep -r -H "eth0" /var/log/
# 案例
https://blog.cloudflare.com/this-is-strictly-a-violation-of-the-tcp-specification/
https://serverfault.com/questions/199434/how-do-i-make-curl-use-keepalive-from-the-command-line
while :;do echo -e "GET / HTTP/1.1\nhost: $YOUR_VIRTUAL_HOSTNAME\n\n";sleep 1;done|telnet $YOUR_SERVERS_IP 80