JAVA(21)-centos-strace

如何在linux下追踪BIO程序。linux是一个文件系统,系统内核的运行会以文件的形式存储,我们可以通过文件系统来查看。
1.BIO程序
2.追踪这个程序,看内核是怎么处理这个进程的。
 


1.BIO程序

public class SocketBIO {

    public static void main(String[] args) throws IOException {
        ServerSocket server=new ServerSocket(9090);//1599
        System.out.println("step1:new ServerSocket(9090)");
        while(true)
        {
            final Socket client=server.accept();//阻塞
            System.out.println("step2:client\t"+client.getPort());

            new Thread(new Runnable()//PID 1676
            {
                public void run() {
                    InputStream in = null;
                    try {
                        in = client.getInputStream();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                        while (true)
                        {
                            String dataline = reader.readLine();
                            if (null != dataline)
                            {
                                System.out.println(dataline);
                            } else
                              {
                                client.close();
                            }
                        }
                } catch (IOException e) 
                    {
                e.printStackTrace();
            }
                }});
     }
  }
}

2.运行并追踪这个程序
    

# 运行这个JAVA文件
/usr/java/j2sdk1.4.2_19/bin/javac SocketBIO

strace -ff -o out /usr/java/j2sdk1.4.2_19/bin/javac SocketBIO 
#1.追踪    strace  追踪线程是否使用内核的系统调用 
#-ff       追踪每个线程
#-O out    追踪的日志输出
#SocketBIO 类名

3.自定义输出文件
   .out1599 是
     
   new Thread 后是out.1676
    

4.系统输出文件

查看整个进程:netstat -natp
#操作系统运行时展开的一个目录
jps
cd /proc/
ls 
cd 1599
ls
cd task
ll
cd fd 
#出来的是线程
#0 输入,1 输出,2 报错,3 server,5 客户端


   

posted @ 2020-09-30 20:38  jasmineTang  阅读(129)  评论(0)    收藏  举报