linux监控命令全覆盖(图文说明) – javafile

1.1 top1.1.1 命令说明

Top 命令能够实时监控系统的运行状态,并且可以按照cpu、内存和执行时间进行排序

1.1.2 参数说明命令行启动参数:用法: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid …]-b : 批次模式运行。通常用作来将top的输出的结果传送给其他程式或储存成文件-c : 显示执行任务的命令行-d : 设定延迟时间-h : 帮助-H : 显示线程。当这个设定开启时,将显示所有进程产生的线程-i : 显示空闲的进程-n : 执行次数。一般与-b搭配使用-u : 监控指定用户相关进程-U : 监控指定用户相关进程-p : 监控指定的进程。当监控多个进程时,进程ID以逗号分隔。这个选项只能在命令行下使用-s : 安全模式操作-S : 累计时间模式-v : 显示top版本,然后退出。-M : 自动显示内存单位(k/M/G)

1.全局命令

回车、空格 : 刷新显示信息?、h : 帮助= : 移除所有任务显示的限制A : 交替显示模式切换B : 粗体显示切换d、s : 更改界面刷新时间间隔G : 选择其它窗口/栏位组I : Irix或Solaris模式切换u、U : 监控指定用户相关进程k : 结束进程q : 退出topr : 重新设定进程的nice值W : 存储当前设定Z : 改变颜色模板

2.摘要区命令

l : 平均负载及系统运行时间显示开关m : 内存及交换空间使用率显示开关t : 当前任务及CPU状态显示开关

1 : 汇总显示CPU状态或分开显示每个CPU状态

1.任务区命令

外观样式b : 黑体/反色显示高亮的行/列。控制x和y交互命令的显示样式x : 高亮显示排序的列y : 高亮显示正在运行的任务z : 彩色/黑白显示。显示内容c : 任务执行的命令行或进程名称f、o : 增加和移除进程信息栏位及调整进程信息栏位显示顺序H : 显示线程S : 时间累计模式u : 监控指定用户相关进程任务显示的数量i : 显示空闲的进程n或# : 设置任务显示最大数量任务排序(shift+f)M : 按内存使用率排序N : 按PID排序P : 按CPU使用率排序T : 按Time+排序< : 按当前排序栏位左边相邻栏位排序> : 按当前排序栏位右边相邻栏位排序F 或 O : 选择排序栏位R : 反向排序

1.1.3 结果说明

1.2 free

1.2.1 命令说明

Free命令是监控系统内存最常用的命令

1.2.2.参数说明

-m:以M为单位查看内存使用情况(默认为kb)

-b:以字节为单位查看内存使用情况

-s:可以在指定时间段内不简单监控内存的使用情况

1.2.3 结果说明

total:总计物理内存的大小。Used:已使用多大。Free:可用有多少。shared:多个进程共享的内存总额。buffers/cached:磁盘缓存的大小。

1.3 vmstat1.1.1命令说明

可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、上下文、CPU的信息。

1.1.2参数说明

vmstat [-a] [-n] [-S unit] [delay [ count]]

-a:显示活跃和非活跃内存-m:显示slabinfo-n:只在开始时显示一次各字段名称。-s:显示内存相关统计信息及多种系统活动数量。delay:刷新时间间隔。如果不指定,只显示一条结果。count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。-d:显示各个磁盘相关统计信息。-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)-V:显示vmstat版本信息。-p:显示指定磁盘分区统计信息-D:显示磁盘总体信息

1.1.3 结果说明

Procs

R:等待被执行的进程数,即表示运行和等待CPU时间片的进程数

B:排队的进程数,即等待资源的进程数

Memory

Swap : 虚拟内存,切换到虚拟内存的内存大小

Free: 空闲的物理内存大小

Buff: 缓冲区大小

Cache: 缓存大小

Swap

Si:磁盘写入虚拟内存,即由内存进入到虚拟内存的大小。

So:虚拟内存写入磁盘,即由虚拟内存进入到磁盘的大小。

Io

Bi:由块设备读入的数据总量,读磁盘

Bo:由块设备写入的数据总量,写磁盘

System

In: 每秒设备中断数

Cs:每秒上下文切换的次数

Cpu

Us:用户进程消耗cpu百分比

Sy:内核进程消耗cpu百分比

Id:cpu处于空闲状态的时间百分比

Wa:Io等待cpu所占时间的百分比

1.4 iostat1.4.1命令说明

Iostat是对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的统计信息。同时给出cpu的使用情况

1.4.2参数说明

iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ … ] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ] ]各选项以及参数含义如下:

-c: 仅显示CPU统计信息.与-d选项互斥.-d :仅显示磁盘统计信息.与-c选项互斥.-k :以K为单位显示每秒的磁盘请求数,默认单位块.-p :device | ALL 与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如: # iostat -p had

或显示所有设备 # iostat -p ALL-t :在输出数据时,打印搜集数据的时间.-V :打印版本号和帮助信息.-x device 输出指定要统计的磁盘设备名称,默认为所有磁盘设备.

– interval :指两次统计间隔时间

– count :按照interval 指定的时间间隔统计的次数

1.4.3结果说明

Iostat的简单应用

Iostat磁盘监控

rrqm/s:每秒进行 merge 的读操作数目,即 delta(rmerge)/s 。wrqm/s:每秒进行 merge 的写操作数目,即 delta(wmerge)/s 。r/s:每秒完成的读 I/O 设备次数,即 delta(rio)/s 。w/s: 每秒完成的写 I/O 设备次数,即 delta(wio)/s 。rsec/s:每秒读扇区数,即 delta(rsect)/s。wsec/s:每秒写扇区数,即 delta(wsect)/srkB/s:每秒读K字节数,是 rsect/s 的一半,因为每扇区大小为512字节。wkB/s:每秒写K字节数,是 wsect/s 的一半avgrq-sz:平均每次设备I/O操作的数据大小 (扇区),即 delta(rsect+wsect)/delta(rio+wio) 。avgqu-sz:平均I/O队列长度,即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。Await:平均每次设备I/O操作的等待时间 (毫秒),即 delta(ruse+wuse)/delta(rio+wio) 。Svctm:平均每次设备I/O操作的服务时间 (毫秒),即 delta(use)/delta(rio+wio) 。%util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的, 即 delta(use)/s/1000 (因为use的单位为毫秒) 。

Iostat cpu 监控

%usr:用户进程消耗的CPU时间百分比。%nice: 运行正常进程消耗的CPU时间百分比。%system:系统进程消耗的CPU时间百分比。%iowait:I/O等待所占CPU时间百分比。%steal:在内存紧张环境下,pagein强制对不同的页面进行的steal操作。%idle:CPU空闲状态的时间百分比。

1.5 mpstat1.5.1命令说明

Mpstat可以监控到cpu的一些统计信息,在多核cpu的系统里不但能够查看所有cpu的平均状况信息,而且能够查看特定的cpu的信息

1.5.2参数说明

mpstat [-P {|ALL}] [internal [count]]

参数:

(1)-P {|ALL}:表示监控哪个CPU,在[0,cpu个数-1]中取值;

(2)internal:相邻的两次采样的间隔时间;

(3)count:采样的次数,count只能和delay一起使用;

备注:当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。

1.5.3结果说明

(1)user:在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程,值为 (usr/total)*100;

(2)nice:在internal时间段里,nice值为负进程的CPU时间(%),值为(nice/total)*100;

(3)system:在internal时间段里,核心时间(%),值为(system/total)*100;

(4)iowait:在internal时间段里,硬盘IO等待时间(%),值为(iowait/total)*100;

(5)irq:在internal时间段里,硬中断时间(%),值为(irq/total)*100;

(6)soft:在internal时间段里,软中断时间(%),值为(softirq/total)*100;

(7)idle:在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%),值为(idle/total)*100;

(8)intr/s:在internal时间段里,每秒CPU接收的中断的次数,值为(intr/total)*100;

1.6 sar1.6.1命令说明

Sar命令可以全名的获取到cpu 、运行、磁盘IO、虚拟内存、内存、网络等信息。

1.6.2参数说明

sar 命令行的常用格式:sar [options] [-A] [-o file] t [n]在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令的选项很多,下面只列出常用选项:

-A:所有报告的总和。-u:CPU利用率-v:进程、节点、文件和锁表状态。-p:像是当前系统中指定CPU使用信息。-d:硬盘使用报告。-r:显示系统内存的使用情况。-n:显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示前三参数所有信息。-q:显示运行队列的大小,它与系统当时的平均负载相同-B:内存分页情况-R:显示进程在采样时间内的活动情况。-g:串口I/O的情况。-b:缓冲区使用情况。-a:文件读写情况。-c:系统调用情况。-R:进程的活动情况。-y:终端设备活动情况。-W:系统交换活动。

1.6.3结果说明

Cpu资源监控

CPU:all 表示统计信息为所有 CPU 的平均值。

%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。

%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。

%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。

%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。

%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。

1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈

2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量

1. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。

如果要查看二进制文件test中的内容,需键入如下sar命令:

sar -u -f test

Inode、文件和其他内核表监控

Dentunued: 目录告诉缓存中未被使用的条目数量

File-nr: 文件句柄的使用数量

Inode-nr: 索引节点句柄的使用数量

Pty-nr :使用的pty的数量

内存和交换空间监控

kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.

kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.

%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.

kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.

kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).

%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.

内存分页监控

pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)

pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)

fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)

majflt/s:每秒钟产生的主缺页数.

pgfree/s:每秒被放入空闲队列中的页个数

pgscank/s:每秒被kswapd扫描的页个数

pgscand/s:每秒直接被扫描的页个数

pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数

%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

IO和传送速率监控

tps:每秒钟物理设备的 I/O 传输总量

rtps:每秒钟从物理设备读入的数据总量

wtps:每秒钟向物理设备写入的数据总量

bread/s:每秒钟从物理设备读入的数据量,单位为 块/s

bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

进程队列长度和平均负载状态监控

runq-sz:运行队列的长度(等待运行的进程数)

plist-sz:进程列表中进程(processes)和线程(threads)的数量

ldavg-1:最后1分钟的系统平均负载(System load average)

ldavg-5:过去5分钟的系统平均负载

ldavg-15:过去15分钟的系统平均负载

系统交换活动信息监控

pswpin/s:每秒系统换入的交换页面(swap page)数量

pswpout/s:每秒系统换出的交换页面(swap page)数量

设备使用情况监控

参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0

tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.

rd_sec/s:每秒读扇区的次数.

wr_sec/s:每秒写扇区的次数.

avgrq-sz:平均每次设备I/O操作的数据大小(扇区).

avgqu-sz:磁盘请求队列的平均长度.

await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).

svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.

%util:I/O请求占CPU的百分比,比率越大,说明越饱和.

1. avgqu-sz 的值较低时,设备的利用率较高。

2. 当%util的值接近 1% 时,表示设备带宽已经占满。

1.7 netstat1.7.1命令说明

Netstat 命令用于显示本机网络链接、运行端口、路由表等信息

1.7.2参数说明

netstat [选项]

-a (all):显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接,断开连接(CLOSE_WAIT)或者处于联机等待状态的(TIME_WAIT)等-t (tcp):显示tcp相关选项-u (udp):仅显示udp相关选项-n :拒绝显示别名,能显示数字的全部转化成数字。-l :仅列出有在 Listen (监听) 的服务状态-p :显示建立相关链接的程序名-r :显示路由信息,路由表,除了显示有效路由外,还显示当前有效的连接-e :显示扩展信息,例如uid等-s :按各个协议进行统计-c :每隔一个固定时间,执行该netstat命令。-v :显示当前的有效连接,与-n选项类似-I :显示自动匹配接口的信息-e :显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

1.7.3结果说明

Iface:表示网络设备的接口名称。MTU:表示最大传输单元,单位为字节。RX-OK/TX-OK:表示已经准确无误地接收/发送了多少数据包。RX-ERR/TX-ERR:表示接收/发送数据包时候产生了多少错误。RX-DRP/TX-DRP:表示接收/发送数据包时候丢弃了多少数据包。RX-OVR/TX-OVR:表示由于误差而丢失了多少数据包。Flg表示接口标记,其中

B 已经设置了一个广播地址。

L 该接口是一个回送设备。

M 接收所有数据包(混乱模式)。

N 避免跟踪。

O 在该接口上,禁用A R P。

P 这是一个点到点链接。

R 接口正在运行。

U 接口处于“活动”状态。

其中RX-ERR/TX-ERR、 RX-DRP/TX-DRP和RX-OVR/TX-OVR的值应该都为0,如果不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一代会下降。

Recv-Q:表示接收队列。Send-Q :表示发送队列。Local Address :表示本地机器名、端口Foreign Address :表示远程机器名、端口State:表示状态,其中

LISTEN :在监听状态中。 ESTABLISHED:已建立联机的联机情况。 TIME_WAIT:该联机在目前已经是等待的状态。

1.8 uptime1.8.1 命令说明

Uptime主要是用来统计系统当前的运行状态

1.8.2参数说明

-V 显示版本

1.8.3 结果说明

输出信息依次是:系统现在的时间,系统从上次开机到现在运行了多长时间,系统当前有多少个登录用户,系统在一分钟内、5分钟内、15分钟内的平均负载注意点:如果load average值长期大于系统CPU的个数则说明CPU很繁忙,负载很高,可能会影响系统性能

1.9 ps1.9.1命令说明

Ps命令是进程查看命令,使用这个命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。

1.9.2参数说明

常用参数:

-A 显示所有进程(等价于-e)(utility)-a 显示一个终端的所有进程,除了会话引线-N 忽略选择。-d 显示所有进程,但省略所有的会话引线(utility)-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)-p pid 进程使用cpu的时间-u uid or username 选择有效的用户id或者是用户名-g gid or groupname 显示组的所有进程。U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.-l 长格式(有F,wchan,C 等字段)-j 作业格式-o 用户自定义格式。v 以虚拟存储器格式显示s 以信号格式显示-m 显示所有的线程-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)e 命令之后显示环境(如:ps -d e; ps -a e)(utility)h 不显示第一行

常用用法:

ps a: 显示现行终端机下的所有程序,包括其他用户的程序。ps -A :显示所有程序。ps c :列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。ps -e :此参数的效果和指定"A"参数相同。ps e :列出程序时,显示每个程序所使用的环境变量。ps f :用ASCII字符显示树状结构,表达程序间的相互关系。ps -H:显示树状结构,表示程序间的相互关系。ps –N:显示所有的程序,除了执行ps指令终端机下的程序之外。ps s:采用程序信号的格式显示程序状况。ps S :列出程序时,包括已中断的子程序资料。ps -t<终端机编号> :指定终端机编号,并列出属于该终端机的程序的状况。ps u:以用户为主的格式来显示程序状况。ps x:显示所有程序,不以终端机来区分。Ps -l:较长较详细的显示该pid信息

最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

1.9.3结果说明

USER 用户名UID 用户ID(User ID)PID 进程ID(Process ID)PPID 父进程的进程ID(Parent Process id)SID 会话ID(Session id)%CPU 进程的cpu占用率%MEM 进程的内存占用率VSZ 进程所使用的虚存的大小(Virtual Size)RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。TTY 与进程关联的终端(tty)STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。I 空闲 IdleZ 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。P 等待交换页W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。X 死掉的进程< 高优先级进程 高优先序的进程N 低优先 级进程 低优先序的进程L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内s 进程的领导者(在它之下有子进程);l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)+ 位于后台的进程组START 进程启动时间和日期TIME 进程使用的总cpu时间COMMAND 正在执行的命令行命令NI 优先级(Nice)PRI 进程优先级编号(Priority)WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。FLAGS 与进程相关的数字标识

1.10 watch

1.10.1命令说明

实时监测命令,还可以检测其他命令运行情况的命令

1.10.2参数说明

-d 高亮显示变动

-n 周期(秒)

1.10.3结果说明

Watch –d –n 1 netstat -ant

每秒监测网络,高亮显示变化。

1.11 strace1.11.1命令说明

Strace命令用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间

1.11.2参数说明

strace使用参数

-p:跟踪指定的进程。-f:跟踪由fork子进程系统调用。-F:尝试跟踪vfork子进程系统调吸入,与-f同时出现时, vfork不被跟踪。-o filename:默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中。-ff:常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到filename.PID文-r:打印每一个系统调用的相对时间。-t:在输出中的每一行前加上时间信息。 -tt 时间确定到微秒级。还可以使用-ttt打印相对时间。-v:输出所有系统调用。默认情况下,一些频繁调用的系统调用不会输出。-s:指定每一行输出字符串的长度,默认是32。文件名一直全部输出。-c:统计每种系统调用所执行的时间,调用次数,出错次数。-e expr:输出过滤器,通过表达式,可以过滤出掉你不想要输出。-d:输出strace关于标准错误的调试信息。-h:输出简要的帮助信息。-i:输出系统调用的入口指针。-q:禁止输出关于脱离的消息。-tt:在输出中的每一行前加上时间信息,微秒级。-T:显示每一调用所耗的时间。-V :输出strace的版本信息。-x:以十六进制形式输出非标准字符串。-xx:所有字符串以十六进制形式输出。

1.11.3结果说明

strace -ff -F -o ls.log ls –l 跟踪ls –l命令的执行情况

当某个函数执行失败时,那么返回值一般为-1

1.12 lsof1.12.1命令说明

Lsof的原始功能是列出打开的文件的进程。Linux下一切皆文件。

1.12.2参数说明

-a :列出打开文件存在的进程-c<进程名> :列出指定进程所打开的文件-g :列出GID号进程详情-d<文件号> :列出占用该文件号的进程+d<目录> :列出目录下被打开的文件+D<目录> :递归列出目录下被打开的文件-n<目录> :列出使用NFS的文件-i<条件> :列出符合条件的进程。-p<进程号>: 列出指定进程号所打开的文件-u 后面跟username:列出该用户相关进程所打开文件-U :仅列出系统socket文件类型-h:显示帮助信息-v:显示版本信息

1.12.3结果说明

列出所有root用户下的socket文件进程

COMMAND:进程的名称PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等TYPE:文件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确切名称思想如钻子,必须集中在一点钻下去才有力量

linux监控命令全覆盖(图文说明) – javafile

相关文章:

你感兴趣的文章:

标签云: