strace命令
# strace 命令查看操作系统日志
`strace -ff -o out java ***.class`
-ff : 跟踪进程下所有线程用到的系统命令
-o : 将跟踪的操作系统日志输出
>i 下面查看JDK1.8下,BIO模式都有哪些系统命令的执行
```java
package com.ibli.javaBase.io.bio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Author gaolei
* @Date 2021/4/3 2:55 下午
* @Version 1.0
*/
public class SockerIo {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9090);
// 阻塞
Socket client = serverSocket.accept();
InputStream inputStream = client.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// 读阻塞
System.err.println(bufferedReader.readLine());
while (true){
}
}
}
```
>i 服务端
1、`javac SockerIo.java` 得到SockerIo.class
然后,使用strace启动java程序👇:
2、`strace -ff -0 out java SockerIo`
得到如下日志:
<img src="https://oscimg.oschina.net/oscnet/up-924f13a6df8c2ce97e13019329008fb4a84.png">
>i 客户端使用nc连接9090端口,然后请求数据
`nc 127.0.0.1 9090` 发送如下数据
<img src="https://oscimg.oschina.net/oscnet/up-4b7b364f021786bd9bdf4f40135da3b4a8d.png">
> strace查看日志
查看主线程日志:
<img src="https://oscimg.oschina.net/oscnet/up-291f9a1018a2d288b88a5c2e43666d5d47e.png">
如上图,👆文件最大的是主线程日志:
<img src="https://oscimg.oschina.net/oscnet/up-c306b9f94e3d0a3582b049d3c4769b4f5ec.png">
根据上面👆strace命令跟踪的日志可以看到,JDK1.8下的BIO的多路复用器是使用的「poll」