ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【linux】linux性能监控工具及vi使用小技巧

【linux】linux性能监控工具及vi使用小技巧

原创 Linux操作系统 作者:xysoul_云龙 时间:2020-06-05 16:30:13 0 删除 编辑
本次我们主要一起学习两个小知识点
  • Linux性能监控或者说是资源使用检查,重点熟悉 sar
  • VI使用小技巧,它的功能强大到“令人发指”(褒义词),我们学习点常用的就好
-->> Linux性能分析
重点是sar,辅助其他工具
1、top
top是我们最常用的实时监控性能的工具(topas/glance)
基本用法如下:
[root@myasm ~]# top -help
top: procps version 3.2.8
usage: top -hv | -abcHimMsS -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
P
cpu使用资源排序
M
内存使用资源排序
N
pid排序显示
T
进程使用时间累积排序
举例:
top  #系统运行多久,整体负载情况 [root@myasm ~]# top top - 08:07:50 up 23 days, 15:40,  1 user,  load average: 0.00, 0.00, 0.00 Tasks: 263 total,   2 running, 261 sleeping,   0 stopped,   0 zombie Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st Mem:   4041252k total,  3139868k used,   901384k free,   439188k buffers Swap:  4972540k total,        0k used,  4972540k free,  1966860k cached
具体参考: https://blog.csdn.net/xujiamin0022016/article/details/89072116
                  https://www.cnblogs.com/ftl1012/p/top.html
2、sar
sar(System Activity Reporter系统活动情况报告) 是目前LINUX上最为全面的系统性能分析工具之一, 可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等方面。
SAR 常用命令如下:
[root@myasm ~]# sar -help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ] [ --legacy ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
#### 更多详细说明,找那个男人( man )
部分输出项解释:
-A
等价于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL
-b
显示I/O和传送速率的统计信息
-B
输出内存页面的统计信息
-c
输出进程统计信息,每秒创建的进程数
-d
输出每一个块设备的活动信息
-i interval
指定间隔时长,单位为秒
-p
显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
-q
输出进程队列长度和平均负载状态统计信息
-r
输出内存和交换空间的统计信息
-R
输出内存页面的统计信息
-t
读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间
-u
输出CPU使用情况的统计信息
-v
输出inode、文件和其他内核表的统计信息
-V
输出版本号信息
-w
输出系统交换活动信息
-W
输出系统交换的统计信息
-y
输出TTY设备的活动信息
-n {DEV|EDEV|NFS|NFSD|SOCK|ALL}
分析输出网络设备状态统计信息。
DEV
报告网络设备的统计信息
EDEV
报告网络设备的错误统计信息
NFS
报告 NFS 客户端的活动统计信息
NFSD
报告 NFS 服务器的活动统计信息
SOCK
报告网络套接字(sockets)的使用统计信息
ALL
报告所有类型的网络活动统计信息
-x {pid|SELF|ALL}
输出指定进程的统计信息。
pid
用 pid 指定特定的进程
SELF
表示 sar 自身
ALL
表示所有进程
-X {pid|SELF|ALL}
输出指定进程的子进程的统计信息
-I {irq|SUM|ALL|XALL}
输出指定中断的统计信息。
irq
指定中断号
SUM
指定输出每秒接收到的中断总数
ALL
指定输出前16个中断
XALL
指定输出全部的中断信息
-P {cpu|ALL}
输出指定 CPU 的统计信息
-o filename
将输出信息保存到文件 filename
-f filename
从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。
-s hh:mm:ss
指定输出统计数据的起始时间
-e hh:mm:ss
指定输出统计数据的截至时间,默认为18:00:00
举例:
##磁盘,每1秒收集一次,一共执行10次,如果配置多路径负载均衡,可以确认是否使用。 sar -dp 1 10  #p参数是为了优化输出 11:34:30 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util 11:34:31 AM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sdh      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sdf      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sdd      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sde      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 11:34:31 AM       sdg      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
部分输出项解释:
tps
每秒从物理磁盘 I/O 的次数。多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的
rd_sec/s
每秒读扇区的次数
wr_sec/s
每秒写扇区的次数
avgrq-sz
平均每次设备 I/O 操作的数据大小(扇区)
avgqu-sz
从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒)
svctm
系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util
I/O请求占CPU的百分比,比率越大,说明越饱和
1. avgqu-sz 的值较低时,设备的利用率较高
2. 当%util的值接近 100% 时,表示设备带宽已经占满
举例:
##cup sar -u 1 2 Linux 2.6.32-573.el6.x86_64 (myasm) 02/07/2020 _x86_64_ (4 CPU) 11:56:56 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle 11:56:57 AM     all      0.00      0.00      1.02      0.00      0.00     98.98 11:56:58 AM     all      0.25      0.00      1.02      0.00      0.00     98.73 Average:        all      0.13      0.00      1.02      0.00      0.00     98.85
部分输出项解释:
CPU
all 表示统计信息为所有 CPU 的平均值。
%user
显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice
显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system
在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait
显示用于等待I/O操作占用 CPU 总时间的百分比。
若 %iowait 的值过高,表示硬盘存在I/O瓶颈
%steal
管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle
显示 CPU 空闲时间占用 CPU 总时间的百分比。
若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
举例:
#内存  ,可以结合free 命令查看 sar -r 1 2 12:17:01 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit 12:17:02 PM    907508   3133744     77.54    436948   1966408   2299724     25.51 12:17:03 PM    907508   3133744     77.54    436948   1966408   2299724     25.51 Average:       907508   3133744     77.54    436948   1966408   2299724     25.51
部分输出项解释:
kbmemfree
可用的空闲内存数量,单位为 KB
kbmemused
已使用的内存数量(不包含内核使用的内存),单位为 KB
%memused
已使用内存的百分数
kbbuffers
内核缓冲区(buffer)使用的内存数量,单位为 KB
kbcached
内核高速缓存(cache)数据使用的内存数量,单位为 KB
kbswpfree
可用的空闲交换空间数量,单位为 KB
kbswpused
已使用的交换空间数量,单位为 KB
%swpused
已使用交换空间的百分数
kbswpcad
交换空间的高速缓存使用的内存数量
举例:
#网络 sar -n DEV 1 2 |egrep 'eth0|IFACE'  #显示网卡eth0 02:53:34 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s 02:53:35 PM      eth0      4.04      0.00      0.27      0.00      0.00      0.00      0.00 02:53:35 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s 02:53:36 PM      eth0      4.04      1.01      0.24      0.29      0.00      0.00      0.00 Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s Average:         eth0      4.04      0.51      0.26      0.15      0.00      0.00      0.00
部分输出项解释:
IFACE
网络设备名
rxpck/s
每秒接收的包总数
txpck/s
每秒传输的包总数
rxbyt/s
每秒接收的字节(byte)总数
txbyt/s
每秒传输的字节(byte)总数
rxcmp/s
每秒接收压缩包的总数
txcmp/s
每秒传输压缩包的总数
rxmcst/s
每秒接收的多播(multicast)包的总数
举例:
#I/O和传送速率的统计信息 sar -b 1 2 Linux 2.6.32-573.el6.x86_64 (myasm) 02/07/2020 _x86_64_ (4 CPU) 02:55:20 PM       tps      rtps      wtps   bread/s   bwrtn/s 02:55:21 PM     16.49      4.12     12.37    131.96    164.95 02:55:22 PM      2.04      0.00      2.04      0.00     16.33 Average:         9.23      2.05      7.18     65.64     90.26
部分输出项解释:
tps
每秒钟物理设备的 I/O 传输总量
rtps
每秒钟从物理设备读入的数据总量
wtps
每秒钟向物理设备写入的数据总量
bread/s
每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s
每秒钟向物理设备写入的数据量,单位为 块/s
##>>制作图表
#输出到二进制文件 sar -o sarfile.log  -dp 1 10 ##制作成csv格式 sadf -d sarfile.log | sed 's/;/,/g' > sarfile.csv
例子:
3、iostat
 iostat 用于输出CPU和磁盘I/O相关的统计信息。
[root@myasm mytest]# iostat -help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]
-c
仅显示CPU统计信息。与-d选项互斥。
-d
仅显示磁盘统计信息。与-c选项互斥。
-k
以KB为单位显示每秒的磁盘请求数。默认单位块。
-m
以MB为单位显示每秒的磁盘请求数。默认单位块。
-p {device|ALL}
用于显示块设备及系统分区的统计信息。与-x选项互斥。
-t
在输出数据时,打印搜集数据的时间。
-V
打印版本号信息。
-x
输出扩展信息。
举例:
iostat 1 2 # 设备扩展向 iostat -x 1 2 Linux 2.6.32-573.el6.x86_64 (myasm) 02/08/2020 _x86_64_ (4 CPU) avg-cpu:  %user   %nice %system %iowait  %steal   %idle           0.18    0.00    0.20    0.06    0.00   99.56 Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn sda               0.20         0.35         2.23     715330    4558778 sdb               0.05         0.23         0.48     470018     975568 sdh               0.33         7.84         6.98   16014900   14244713 sdc               0.33         0.00         2.66       8820    5438344 sdf               0.43         0.24         5.25     500050   10718248 sdd               0.00         0.00         0.00       4922         80 sde               0.00         0.00         0.00       2520          0 sdg               1.61        27.44        19.89   56035885   40610996 dm-0              0.29         0.35         2.23     705530    4558728 dm-1              0.00         0.00         0.00       2744          0 dm-2              0.66         0.24         5.25     498826   10718248 dm-3              0.00         0.00         0.00       3698         80 dm-4              0.07         0.23         0.48     468794     975568
avg-cpu 部分输出项说明:
%user
在用户级别运行所使用的 CPU 的百分比。
%nice
nice 操作所使用的 CPU 的百分比。
%system
在核心级别(kernel)运行所使用 CPU 的百分比。
%iowait
CPU 等待硬件 I/O 所占用 CPU 的百分比。
%steal
当管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle
CPU 空闲时间的百分比。
Device 部分基本输出项说明:
tps
每秒钟物理设备的 I/O 传输总量。
Blk_read
读入的数据总量,单位为块。
Blk_wrtn
写入的数据总量,单位为块。
kB_read
读入的数据总量,单位为KB。
kB_wrtn
写入的数据总量,单位为KB。
MB _read
读入的数据总量,单位为MB。
MB _wrtn
写入的数据总量,单位为MB。
Blk_read/s
每秒从驱动器读入的数据量,单位为 块/s。
Blk_wrtn/s
每秒向驱动器写入的数据量,单位为 块/s。
kB_read/s
每秒从驱动器读入的数据量,单位为KB/s。
kB_wrtn/s
每秒向驱动器写入的数据量,单位为KB/s。
MB _read/s
每秒从驱动器读入的数据量,单位为MB/s。
MB _wrtn/s
每秒向驱动器写入的数据量,单位为MB/s。
Device 部分扩展输出项说明(iostat -x ):
rrqm/s
将读入请求合并后,每秒发送到设备的读入请求数。
wrqm/s
将写入请求合并后,每秒发送到设备的写入请求数。
r/s
每秒发送到设备的读入请求数。
w/s
每秒发送到设备的写入请求数。
rsec/s
每秒从设备读入的扇区数。
wsec/s
每秒向设备写入的扇区数。
rkB/s
每秒从设备读入的数据量,单位为 KB/s。
wkB/s
每秒向设备写入的数据量,单位为 KB/s。
rMB/s
每秒从设备读入的数据量,单位为  MB /s。
wMB/s
每秒向设备写入的数据量,单位为  MB /s。
avgrq-sz
发送到设备的请求的平均大小,单位为扇区。
avgqu-sz
发送到设备的请求的平均队列长度。
await
I/O请求平均执行时间。包括发送请求和执行的时间。单位为毫秒。
svctm
发送到设备的I/O请求的平均执行时间。单位为毫秒。
%util
在I/O请求发送到设备期间,占用CPU时间的百分比。用于显示设备的带宽利用率。当这个值接近100%时,表示设备带宽已经占满。
4、mpstat
mpstat 输出每一个 CPU 的运行状况,为多处理器系统中的 CPU 利用率提供统计信息。
 [root@myasm ~]# mpstat -help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -I { SUM | CPU | ALL } ] [ -u ]
[ -P { <cpu> [,...] | ON | ALL } ] [ -V ]
举例:
mpstat 1 2 # 命令输出不展示,类似sar -u mpstat -P ALL 1 2 #cpu ALL/也可选择第几个cpu(-P 2 1 2)  1秒收集一次,共计两次 07:53:30 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle 07:53:31 AM  all    0.00    0.00    0.26    0.26    0.00    0.00    0.00    0.00   99.49 07:53:31 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00 07:53:31 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00 07:53:31 AM    2    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00 07:53:31 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
部分输出项解释:
CPU
在多CPU系统里,每个CPU有一个ID号,第一个CPU为0。all表示统计信息为所有CPU的平均值。
%user
显示在用户级别运行所占用CPU总时间的百分比。
%nice
显示在用户级别,用于nice操作,所占用CPU总时间的百分比。
%sys
显示在kernel级别运行所占用CPU总时间的百分比。注意:这个值并不包括服务中断和softirq。
%iowait
显示用于等待I/O操作时,占用CPU总时间的百分比。
%irq
显示用于中断操作,占用CPU总时间的百分比。
%soft
显示用于softirq操作,占用CPU总时间的百分比。
%steal
管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle
显示CPU在空闲状态,占用CPU总时间的百分比。
intr/s
显示CPU每秒接收到的中断总数。
5、vmstat
vmstat命令是最常见的Linux/Unix监控工具,属于sysstat包。可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
[root@myasm ~]# vmstat -help
usage: vmstat [-V] [-n] [delay [count]]
-V prints version.
-n causes the headers not to be reprinted regularly.
-a print inactive/active page stats.
-d prints disk statistics
-D prints disk table
-p prints disk partition statistics
-s prints vm table
-m prints slabinfo
-t add timestamp to output
-S unit size
delay is the delay between updates in seconds.
unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
count is the number of updates.
举例:
vmstat 1 2 #使用详情及具体解释可  man vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 0  0      0 904704 439200 1966928    0    0     5     5    4    3  0  0 100  0  0 1  0      0 904500 439200 1966928    0    0     0     0 1586 3129  0  0 100  0  0
网址参考: https://blog.csdn.net/m0_38110132/article/details/84190319
6、iotop
iotop 默认是不安装的,如果需要,需手动安装。 安装命令 yum -y install iotop。
    如果没有系统盘怎么办,iotop包下载地址: https://pkgs.org/download/iotop
    解释:iotop是一款开源、免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息。它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控。
[root@myasm ~]# iotop -help
Usage: /usr/sbin/iotop [OPTIONS]
DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
period. SWAPIN and IO are the percentages of time the thread spent respectively
while swapping in and waiting on I/O more generally. PRIO is the I/O priority at
which the thread is running (set using the ionice command).
Controls: left and right arrows to change the sorting column, r to invert the
sorting order, o to toggle the --only option, p to toggle the --processes
option, a to toggle the --accumulated option, q to quit, any other key to force
a refresh.
Options:
--version             show program's version number and exit
-h, --help            show this help message and exit
-o, --only            only show processes or threads actually doing I/O
-b, --batch           non-interactive mode
-n NUM, --iter=NUM    number of iterations before ending [infinite]
-d SEC, --delay=SEC   delay between iterations [1 second]
-p PID, --pid=PID     processes/threads to monitor [all]
-u USER, --user=USER  users to monitor [all]
-P, --processes       only show processes, not all threads
-a, --accumulated     show accumulated I/O instead of bandwidth
-k, --kilobytes       use kilobytes instead of a human friendly unit
-t, --time            add a timestamp on each line (implies --batch)
-q, --quiet           suppress some lines of header (implies --batch)
举例:
#只显示正在产生io的进程或线程 iotop -o #非交互模式,5秒执行一次,执行10次,输出到日志。如果打算输出日志,建议非交互模式 nohup iotop -b -o -n 10 -d 5 -t  > /tmp/iotop.log &
具体参考: https://www.cnblogs.com/legendbaby/p/5056967.html
7、其他工具,例如 osw,dd磁盘测速、netstat网络信息等
其他工具不做介绍,大家有兴趣的可以去测试下。
补充参考: http://rdc.hundsun.com/portal/article/731.html?ref=myread
                    https://www.jianshu.com/p/08cc9a39a265
              https://shockerli.net/post/linux-tool-sar/
-->>  VI使用小技巧
  • Green    = Essential
  • Yellow   = Basic
  • Orange   /  Blue = Advanced
  • Red    = Expert
详细参考: http://michael.peopleofhonoronly.com/vim/
    部分命令参考: https://blog.csdn.net/xdfwsl/article/details/80789797
    其它键盘图例: https://www.runoob.com/w3cnote/all-vim-cheatsheat.html
一些简单的命令就不说了,例如 i-->插入,上下左右键的使用(有时候还不管用)。
小知识:在unix系统,尤其hpux中,有时候回格键会各种乱码影响编写命令,可使用一下环境变量
#就进入vi的编辑模式了,回格键好用,还能使用vi 的一些小技巧     set -o vi       #而且命令还能上下翻,Ctrl+k/j/h/l 意思 上下左右,当然也能编辑     #注意,linux中,如果使用 是Esc+k/j/h/l
以下命令都是命令行模式下,也就是没按"i"
注意:vim是vi的升级版,有些命令vi无法操作,如果打算使用更高级的方法,推荐使用vim
操作命令
解释
kjhl
上下左右键
gg/G
文本顶头/文本末尾 #aix/hpux gg命令失效.
nG 选择第几行,可结合显示行号 :set nu,或者 : 行号
H/L
当前屏幕的首行/最后一行
:%s/test/tt/g
全局替换字符串test,替换后tt。如有特殊字符需转义
ZZ/ZQ
保存退出/不保存退出
dd/D
dd删除一行,D删除一行内容(变成空行). dd前边加数字,例如2dd,从光标起始位置向下删除2行。
:set nu
显示行数
r/R
替换当前字符/替换当前行
cw/C=cW
替换当前单词/替换光标所在一行
o/O
光标下新建一行进入编辑模式/光标上新建一行进入编辑模式
5yyp
复制光标开始5行,并粘贴到光标的下一行
ci[')"{..]
组合命令,替换到什么位置结束,例如ci) 从'('光标开始,到')'结束,全部替换。也可以使用di/yi/vi等
Ctrl+B/F/E/Y
上下翻页、上下滚动
t/T&&f/F
光标所在行 向后直到某个字符前/向前直到某个字符前
光标所在行 向后查找某个字符/向前查找某个字符
其他
像行位还是插入A,光标后边插入a,一直到行位$,行首^,oO uU 等一些经常使用的命令,建议熟悉,操作起来很方便
分享到此结束,谢谢。
如有其它问题,我们可以继续探讨。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29487349/viewspace-2696533/,如需转载,请注明出处,否则将追究法律责任。

全部评论
主要从事数据库相关工作,其他操作系统、中间件等也有涉及,热衷分享、开源,支持国产,期待中华民族全面的伟大复兴。岁月老将至,如有幸在江湖中留点踪迹,也是欣慰。 【文盲筱烨】好读书爱运动的IT技术爱好者 微博:文盲筱烨 微信公众号:筱烨视点

注册时间:2014-02-15

  • 博文量
    179
  • 访问量
    780699