IO精讲杂篇day01

IO精讲杂篇day01

1. 命令篇

strace 是一个强大的跟踪系统调用的工具,它可以帮助你理解程序在运行时是如何与操作系统进行交互的。当你使用 -ff 选项时,strace 会为每个被跟踪的进程(包括由该进程创建的子进程)创建一个单独的文件来记录其系统调用。-o 选项通常用于指定输出文件的名称,但如果你直接跟 -o 而不指定文件名,strace 会报错,因为它需要一个具体的文件名或文件名模式来保存输出。然而,当你想要为每个进程生成单独的文件时,通常的做法是结合使用 -ff 和 -o 选项,但你需要为 -o 提供一个包含某种占位符的文件名模式,这样 strace 才能为每个进程生成唯一的文件名。

例如,你可以这样做:

strace -ff -o trace-%p.log -e trace=all your_command

在这个例子中:

  • -ff 表示为每个进程创建单独的文件。
  • -o trace-%p.log 指定了输出文件的命名模式。%p 是一个占位符,代表进程的 PID(进程ID)。因此,每个进程的系统调用跟踪都会被写入一个以 trace- 开头,后跟该进程 PID,最后以 .log 结尾的文件中。
  • -e trace=all 是一个可选的 strace 选项,用于指定要跟踪的系统调用类型。在这个例子中,all 表示跟踪所有系统调用。你可以根据需要调整这个选项来只跟踪特定的系统调用。
  • your_command 是你想要跟踪的命令或程序。
    这样,你就可以为每个进程获得一个单独的系统调用跟踪文件,便于后续的分析和调试。

lsof(list open files)是一个列出当前系统打开文件的工具。他的主要左右有:查看进程打开的文件;可以确定哪些进程正在使用特定的文件或设备,例如,如果你想知道哪个进程正在访问某个磁盘文件,可以使用lsof来查找;对于排查文件被占用无法删除等问题非常有用;查找网络连接相关信息;可以显示与网络连接相关的文件描述符,帮助确定哪些进程正在使用特定的网络端口;对于网络故障排查和确定特定服务的使用情况很有帮助。

常用参数:

  • -i:显示与网络连接相关的文件描述符。例如,lsof -i :80可以列出所有正在使用 80 端口的进程。
  • -p:指定进程 ID,显示该进程打开的文件。例如,lsof -p 1234将显示进程 ID 为 1234 的进程打开的文件。
  • -u:指定用户名,显示该用户拥有的进程打开的文件。例如,lsof -u username。

使用示例:查找某个文件被哪些进程打开:

lsof /path/to/file

查看特定端口的使用情况:其中port_number是要查询的端口号。

lsof -i :port_number

总之lsof是一个强大的工具,在系统管理、故障排查和性能优化等方面都有广泛的应用。

tcpdump是一个强大的网络数据包分析工具。其主要功能:数据包捕获可以在网络接口上捕获经过的数据包,包括以太网、Wi-Fi 等各种网络类型。能够捕获特定协议(如 IP、TCP、UDP 等)、特定端口或特定主机之间的数据包。显示捕获到的数据包的详细信息,包括数据包的头部信息、数据内容等。可以分析网络通信的流程、协议的交互过程以及可能存在的问题。先看看tcpdump的具体参数及意义:

  • -i:指定tcpdump监听的网络接口

  • -s:指定要监听数据包的长度

  • -c:指定要监听的数据包数量,达到指定数量后自动停止抓包

  • -w:指定将监听到的数据包写入文件中保存

  • -A:指定将每个监听到的数据包以ACSII可见字符打印

  • -n:指定将每个监听到数据包中的域名转换成IP地址后显示

  • -nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示

  • -e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议

  • -p:将网卡设置为非混杂模式,不能与host或broadcast一起使用

  • -r:指定从某个文件中读取数据包

  • -S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号

下面看几个具体例子:

  • 抓取网口eth0上192.168.0.250与除192.168.0.74外的其他主机之间的icmp报文
    tcpdump -i eth0 -s 1400 -nn host 192.168.0.250 and ! 192.168.0.74 and icmp -e
    
  • 抓取网口eth0上192.168.0.250与除192.168.0.74外的所有tcp数据包,这里用到了括号,注意,在tcpdump中使用括号时必须用转义:
    tcpdump -i eth0 -s 1400 -nn tcp and host192.168.0.250and!192.168.0.74
    
  • 抓取网口eth0上源mac地址或目的mac地址为00:21:85:6C:D9:A3的所有数据包,注意,这里的mac地址格式必须以’:'分隔:
    tcpdump -i eth0 ether src or dst 00:21:85:6C:D9:A3
    

2. 网络IO模型

BIO:
在这里插入图片描述

NIO:
在这里插入图片描述
只有块设备可以做Mmap映射,
java中只有Randomaccessfile有一个map方法,才能做文件的mmap映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值