GeekIBLi

JVM-strace

2021-07-28

strace 命令查看操作系统日志

strace -ff -o out java ***.class

-ff : 跟踪进程下所有线程用到的系统命令
-o : 将跟踪的操作系统日志输出

下面查看JDK1.8下,BIO模式都有哪些系统命令的执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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){

}
}
}

服务端

1、javac SockerIo.java 得到SockerIo.class
然后,使用strace启动java程序👇:
2、strace -ff -0 out java SockerIo
得到如下日志:

客户端使用nc连接9090端口,然后请求数据

nc 127.0.0.1 9090 发送如下数据

strace查看日志

查看主线程日志:

如上图,👆文件最大的是主线程日志:

根据上面👆strace命令跟踪的日志可以看到,JDK1.8下的BIO的多路复用器是使用的「poll」

Tags: JVM