如何在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 客户端