视频介绍:清华大牛权威讲解nio,epoll,多路复用,更好的理解redis-netty-Kafka等热门技术 视频url: https://www.bilibili.com/video/BV11K4y1C7rm?from=search&seid=8685677326405037287
服务器:本运行在阿里云服务器上面 操作系统:Linux CentOS Jdk: java8
下面展示一些 内联代码片。
import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class serverSocket02{ public static void main(String[] args) throws Exception{ ServerSocket server = new ServerSocket(8092); System.out.println("step1: new ServerSocket(8092)"); while(true){ Socket client = server.accept(); System.out.println("step2:client\t"+client.getPort()); new Thread(()->{ try{ InputStream in = client.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while(true){ System.out.println(reader.readLine()); } } catch (IOException e){ e.printStackTrace(); } }).start(); } } }javac serverSocket02.java
执行抓取程序对内核调用指令trace trace -ff -o ./out java *** 表示跟增***的所有系统调用,将其输出到当前目录下的out开头的文件夹下,执行后如果目录为out3399 ,表示此进行启动了一个3399线程 strace -ff -o ./out java serverSocket02.class ----- 错误 strace -ff -o ./out java serverSocket02 ----- 正确
jps 查看当前运行程序进程号 netstat -natp 查看当前tcp连接 testSocket 3333 ,表示当前运行程序主进程号码是3333
Cd /proc/3333/task ,查看此进行下所有子进程,(当一个程序运行老是死掉,可以观察是否此程序开启了很多线程) cd /proc/1708/task Cd /proc/3333/fd 会看到 1 **** 2 **** 3 **** 一切程序都是文件 ****/jre/lib/rt.jar runtime运行时 cd /proc/1708/fd
Netstat -natp 查看所有tcp进程 会看到 有一个8092的本地进程为listen状态
nc localhost 8092
Netstat -natp 会看到 增加了一个8092状态的established状态的端口,一个nc的客户端程序
1708 ---- 主线程 1709----main函数所在线程
Vim out.1709 :set nu----设置显示行号
/socket.*7$ ----------查看 socket 开始 7 结束的行 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) = 7 ----------------------------- 表示一个ServerSocket fd 为7
bind(7, {sa_family=AF_INET6, sin6_port=htons(8092), inet_pton(AF_INET6, “::”, &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = 0 ------------8092端口绑定到 fd 7 listen(7, 50) --------------Listen 7 accept(7, {sa_family=AF_INET6, sin6_port=htons(42578), inet_pton(AF_INET6, “::1”, &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, [28]) = 8 ----------------表示 fd 为7 接收 42578 端口的链接 , 此 链接fd 为8
man 2 socket man 2 bind man 2 listen man 2 accept