史上最全的高可用服务系统线上问题排查工具单(二)

2019/04/16 09:15
阅读数 261


本文是史上最全的高可用服务系统线上问题排查工具单(一)的第2篇,侧重于命令在特定场景下如何帮助应急人员和攻关人员定位问题并解决问题,因此,对于每个命令的介绍将直切主题,直接介绍命令使用的具体场景,而不是介绍命令的详细使用格式。


08

 /Proc文件系统

_____


Linux系统内核提供了通过/proc文件系统查看运行时内核内部数据结构的能力,也可以改变内核参数设置。


显示CPU信息:

cat /proc/cpuinfo

显示内存信息:

cat /proc/meminfo

显示详细的内存映射信息:

cat /proc/zoneinfo

显示磁盘映射信息:

cat /proc/mounts

查看系统平均负载命令:

cat /proc/loadavg


09

 性能和压测工具

_____

1、ab

ab是一款针对HTTP协议实现的服务进行性能压测的工具,它本来是设计用来测量apache服务器的性能指标,特别是测试阿帕奇服务器每秒能够处理多少请求的指标,以及响应的时间等,但是此命令也可以用来测试一切通用的HTTP协议服务器的性能。


测量HTTP GET协议的接口:

robert@robert-ubuntu1410:~$ ab -c10 -n100000 "http://localhost:8080/genid"
This is ApacheBench, Version 2.3 <$Revision:1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests


Server Software:       Apache-Coyote/1.1
Server Hostname:       localhost
Server Port:           8080

Document Path:         /genid
Document Length:       19 bytes

Concurrency Level:     10
Time taken for tests:  30.728 seconds
Complete requests:     100000
Failed requests:       0
Total transferred:     16700000 bytes
HTML transferred:      1900000 bytes
Requests per second:   3254.33 [#/sec] (mean)
Time per request:      3.073 [ms] (mean)
Time per request:      0.307 [ms] (mean, across all concurrent requests)
Transfer rate:         530.74 [Kbytes/sec] received

Connection Times (ms)
             min  mean[+/-sd] median   max
Connect:       0    0   0.8      0      24
Processing:    0    3   3.1      2      88
Waiting:       0    2   2.7      1      80
Total:         0    3   3.3      2      88

Percentage of the requests served within a certain time (ms)
 50%      2
 66%      3
 75%      4
 80%      4
 90%      6
 95%      9
 98%     13
 99%     16
100%     88 (longest request)


从输出中可以看出,开源的Vesta发号器QPS达到3254.33,平均响应时间是3毫秒,所有请求在88毫秒内返回,99%的请求在16毫秒返回。


也可以对使用POST协议的服务进行压测:

ab -c 10 -n 1000 -p post -T  'application/x-www-form-urlencoded'  http://localhost:8080/billing/account/update

POST文件内容:

accountId=1149983321489408&clientDesc=1


2、jmeter

jmeter是apache组织开发的基于Java的性能压力测试工具。用于对Java开发的软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到通用的性能测试领域。它可以用于测试静态和动态资源,例如静态文件、Java Applet、CGI脚本、Java类库、数据库、FTP服务器,HTTP服务器等等。


jmeter可以用于对服务器、网络或对象模拟巨大的负载,在不同类别的压力下,测试它们的强度和分析整体性能。另外,jmeter能够对应用程序做功能和回归测试,通过创建带有断言的脚本来自动化的验证你的程序满足你期望的结果。为了最大限度的灵活性,jmeter允许使用正则表达式创建断言。


jemeter是一个复杂性能测试工具和平台,开发者需要在自己的平台下集成jmeter,并且开发jemeter的测试用例才能使用,本文不对jmeter做展开,读者可自行通过阅读jmeter主页的文档学习。


3、mysqlslap

这是mysql自带的一款性能压测工具,通过模拟多个并发客户端访问mysql来执行压力测试,同时提供了详细的的数据性能报告。此工具可以自动生成测试表和数据,并且可以模拟读、写、混合读写、查询等不同的使用场景,并且能够很好的对比多个存储引擎在相同环境下的并发压力下性能上的差别。


1 )使用单线程测试

使用方式:

mysqlslap -a -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a -uroot -pyouarebest
Benchmark
   Average number of seconds to run all queries:0.108 seconds
   Minimum number of seconds to run all queries:0.108 seconds
   Maximum number of seconds to run all queries:0.108 seconds
    Number of clients running queries:1
   Average number of queries per client:0

这里可以看到,使用单线程连接一次服务器需要108毫秒。


2 )使用100个多线程测试

使用方式:

mysqlslap -a -c 100 -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a -c 100 -uroot -pyouarebest
Benchmark
   Average number of seconds to run all queries:0.504 seconds
   Minimum number of seconds to run all queries:0.504 seconds
   Maximum number of seconds to run all queries:0.504 seconds
    Number of clients running queries:100
   Average number of queries per client:0

这里可以看到,使用多线程连接一次服务器需要504毫秒/100,大约为5毫秒,可见增加并发提高了吞吐量指标。


3) 多次测试对测试结果求平均值

使用方式:

mysqlslap -a -i 10 -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a -i 10 -uroot -pyouarebest
Benchmark
   Average number of seconds to run all queries:0.108 seconds
   Minimum number of seconds to run all queries:0.098 seconds
   Maximum number of seconds to run all queries:0.132 seconds
    Number of clients running queries:1
   Average number of queries per client:0

这里可以看到,多次测试求平均值,可以看到不同次的测试的结果稍有不同,平均为108ms,这与第一个测试结果是相同的。


4) 测试读操作的性能指标

使用方式:

mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=read -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=read -uroot -pyouarebest
Benchmark
   Average number of seconds to run all queries:0.048 seconds
   Minimum number of seconds to run all queries:0.048 seconds
   Maximum number of seconds to run all queries:0.048 seconds
    Number of clients running queries:10
   Average number of queries per client:100

可以算出,平均每个查询需要48毫秒/1000,为0.048毫秒。数据库服务器处理SQL的QPS为1000/0.048秒, 平均QPS为20833次/每秒。


5) 测试写操作的性能指标

使用方式:

mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=write -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=write -uroot -pyouarebest
Benchmark
   Average number of seconds to run all queries:3.460 seconds
   Minimum number of seconds to run all queries:3.460 seconds
   Maximum number of seconds to run all queries:3.460 seconds
    Number of clients running queries:10
   Average number of queries per client:100

可以算出,平均每个写操作需要3460毫秒/1000,为3.4毫秒。数据库服务器处理SQL的QPS为1000/3.46秒, 平均QPS为289次/每秒。


6) 测试读写混合操作的性能指标

使用方式:

mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=mixed -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=mixed -uroot -pyouarebest
Benchmark
   Average number of seconds to run all queries:1.944 seconds
   Minimum number of seconds to run all queries:1.944 seconds
   Maximum number of seconds to run all queries:1.944 seconds
    Number of clients running queries:10
   Average number of queries per client:100

可以算出,平均每个读或写操作需要1944毫秒/1000,为1.9毫秒。数据库服务器处理SQL的QPS为1000/1.944秒, 平均QPS为514次/每秒。


7) 多次不同并发数混合操作的性能指标

测试不同的存储引擎的性能进行对比,执行一次测试,分别50和100个并发,共执行1000次总查询,50和100个并发分别得到一次测试结果,并发数越多,执行完所有查询的时间越长,为了准确起见,可以多次迭代测试后求多次平均值。


使用方式:

mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info --engine=myisam,innodb --iterations=5 -uroot -pyouarebest

命令输出:

robert@robert-ubuntu1410:~$ mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info --engine=myisam,innodb --iterations=5 -uroot -pyouarebest
Benchmark
   Running for engine myisam
   Average number of seconds to run all queries:0.080 seconds
   Minimum number of seconds to run all queries:0.070 seconds
   Maximum number of seconds to run all queries:0.106 seconds
    Number of clients running queries:50
   Average number of queries per client:20


Benchmark
   Running for engine myisam
   Average number of seconds to run all queries:0.100 seconds
   Minimum number of seconds to run all queries:0.075 seconds
   Maximum number of seconds to run all queries:0.156 seconds
    Number of clients running queries:100
   Average number of queries per client:10

Benchmark
   Running for engine innodb
   Average number of seconds to run all queries:0.527 seconds
   Minimum number of seconds to run all queries:0.437 seconds
   Maximum number of seconds to run all queries:0.801 seconds
    Number of clients running queries:50
   Average number of queries per client:20

Benchmark
   Running for engine innodb
   Average number of seconds to run all queries:0.608 seconds
   Minimum number of seconds to run all queries:0.284 seconds
   Maximum number of seconds to run all queries:0.991 seconds
    Number of clients running queries:100
   Average number of queries per client:10


User time 0.85, System time 1.28
Maximum resident set size 14200, Integral resident set size 0
Non-physical pagefaults 36206, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 61355, Involuntary context switches 1244

从这次测试可以看到,并发数增多,由于有并发就有同步操作的损耗,100并发的响应时间性能指标要略小于50并发的性能指标。


4、sysbench

1) CPU性能测试

使用方式:

sysbench --test=cpu --cpu-max-prime=20000 run

命令输出:

robert@robert-ubuntu1410:~$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options
Number of threads:1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test:20000


Test execution summary:
    total time:                         26.0836s
   total number of events:             10000
    total time taken by event execution:26.0795
    per-request statistics:
        min:                                 2.41ms
         avg:                                 2.61ms
        max:                                 6.29ms
        approx.  95 percentile:              2.93ms

Threads fairness:
    events (avg/stddev):          10000.0000/0.00
    execution time (avg/stddev):  26.0795/0.00

从这里可以看出做一次素数加法运算平均时间是2.61毫秒。


2 )线程锁性能测试

使用方式:

robert@robert-ubuntu1410:~$ sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run

命令输出:

robert@robert-ubuntu1410:~$ sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options
Number of threads:64

Doing thread subsystem performance test
Thread yields per test:100 Locks used:2
Threads started!
Done.


Test execution summary:
    total time:                         0.6559s
   total number of events:             10000
    total time taken by event execution:41.5442
    per-request statistics:
        min:                                 0.02ms
         avg:                                 4.15ms
        max:                               114.28ms
        approx.  95 percentile:             23.35ms

Threads fairness:
    events (avg/stddev):          156.2500/36.13
    execution time (avg/stddev):  0.6491/0.00

可见,在64个线程中,每个线程yield 100次,并且上锁2次,每次事件需要4毫秒的时间。


3) 磁盘随机IO性能测试

用sysbench工具可以测试顺序读,顺序写,随机读,随机写等磁盘IO性能:

sysbench --test=fileio --file-num=16 --file-total-size=100M prepare

sysbench --test=fileio --file-total-size=100M --file-test-mode=rndrd --max-time=180 --max-requests=100000000 --num-threads=16 --init-rng=on --file-num=16 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run

sysbench --test=fileio --file-num=16 --file-total-size=2G cleanup

命令输出:

robert@robert-Latitude-E6440:~/tmp$ sysbench --test=fileio --file-num=16 --file-total-size=100M prepare
sysbench 0.4.12: multi-threaded system evaluation benchmark

16 files, 6400Kb each, 100Mb total
Creating files for the test...

robert@robert-Latitude-E6440:~/tmp$ sysbench --test=fileio --file-total-size=100M --file-test-mode=rndrd --max-time=180 --max-requests=100000000 --num-threads=16 --init-rng=on --file-num=16 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads:16
Initializing random number generator from timer.


Extra file open flags:16384
16 files, 6.25Mb each
100Mb total file size
Block size 16Kb
Number of random requests for random IO:100000000
Read/Write ratio for combined random IO test:1.50
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random read test
Threads started!
Time limit exceeded, exiting...
(last message repeated 15 times)
Done.

Operations performed: 43923 Read, 0 Write, 0 Other = 43923 Total
Read 686.3Mb  Written 0b  Total transferred 686.3Mb  (3.8104Mb/sec)
 243.86 Requests/sec executed

Test execution summary:
   total time:                         180.1126s
   total number of events:             43923
   total time taken by event execution:2880.7789
   per-request statistics
        min:                                 0.13ms
        avg:                                65.59ms
        max:                              1034.24ms
        approx.  95 percentile:            223.33ms

Threads fairness:
   events (avg/stddev):          2745.1875/64.44
   execution time (avg/stddev):  180.0487/0.03

robert@robert-Latitude-E6440:~/tmp$ sysbench --test=fileio --file-num=16 --file-total-size=2G cleanup
sysbench 0.4.12: multi-threaded system evaluation benchmark

Removing test files...

上面测试显示,这台机器随机IO速度3M/s,IOPS高达243.86。


4 )内存性能测试

使用方式:

robert@robert-ubuntu1410:~$ sysbench --test=memory --memory-block-size=16k --memory-total-size=16K run

命令输出:

由于虚拟机有问题,没有收集到这部分的输出信息 :(


4) MYSQL事务性操作测试

由于prepare阶段不能自动创建schema,需要手工预先创建测试使用的schema,并且使用--mysql-db=test来指定。


使用方式:

sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000 --mysql-user=root --mysql-host=localhost --mysql-password=youarebest --mysql-db=test  run

命令输出:

robert@robert-ubuntu1410:/etc/mysql$ sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000 --mysql-user=root --mysql-host=localhost --mysql-password=youarebest --mysql-db=test  prepare
sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Creating table 'sbtest'...
Creating 1000 records in table 'sbtest'...

robert@robert-ubuntu1410:/etc/mysql$ sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000 --mysql-user=root --mysql-host=localhost --mysql-password=youarebest --mysql-db=test  run
sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options
Number of threads:1

Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "LOCK TABLES WRITE" for starting transactions
Using auto_inc on the id column
Maximum number of requests for OLTP test is limited to 10000
Threads started!
Done.

OLTP test statistics:
    queries performed:
       read:                           140000
       write:                          50000
        other:                          20000
        total:                          210000
    transactions:                       10000  (689.49 per sec.)
    deadlocks:                          0      (0.00 per sec.)
   read/write requests:                190000 (13100.32 per sec.)
    other operations:                   20000  (1378.98 per sec.)

Test execution summary:
    total time:                         14.5035s
   total number of events:             10000
    total time taken by event execution:14.4567
    per-request statistics:
        min:                                 0.92ms
         avg:                                 1.45ms
        max:                                19.34ms
        approx.  95 percentile:              2.52ms

Threads fairness:
    events (avg/stddev):          10000.0000/0.00
    execution time (avg/stddev):  14.4567/0.00
   
robert@robert-ubuntu1410:/etc/mysql$ sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000 --mysql-user=root --mysql-host=localhost --mysql-password=youarebest --mysql-db=test  cleanup
sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Dropping table 'sbtest'...
Done.

从测试结果中得出事务TPS为689次/秒,读写的QPS为13100次/秒,每个请求处理的平均时间是1.45毫秒。


5、dd

dd可以用于测试磁盘顺序IO的存取速度,在应用场景中,打印日志通常表现为顺序IO的写操作,而数据库查询多为磁盘随机IO。

在磁盘上放一个文件,然后使用如下命令:

dd if=/home/robert/test-file of=/dev/null bs=512 count=10240000

从结果中就能看出这个磁盘的顺序IO的读取速度:

robert@robert-Latitude-E6440:~/working/multimedia-test$ dd if=./bigfile.tar of=/dev/null bs=512 count=10240000
记录了160+0 的读入
记录了160+0 的写出
81920字节(82 kB)已复制,0.0277534 秒,3.0 MB/秒
robert@robert-Latitude-E6440:~/working/multimedia-test$ dd if=./bigfile.tar of=/dev/null bs=512 count=10240000
记录了160+0 的读入
记录了160+0 的写出
81920字节(82 kB)已复制,0.000345242 秒,237 MB/秒
robert@robert-Latitude-E6440:~/working/multimedia-test$ dd if=./bigfile.tar of=/dev/null bs=512 count=10240000
记录了160+0 的读入
记录了160+0 的写出
81920字节(82 kB)已复制,0.000238306 秒,344 MB/秒

从上面的测试中发现,文件的顺序读取可以达到上百兆字节,第一次只有3兆,这是因为第一次操作系统的IO缓存没有命中导致的。普通x86机器上顺序读在100M左右,IBM或者华为的高端机器可以达到1G/s。


10

 摘要命令

_____

1、md5sum

用于生成md5摘要,通常用于文件上传和下载操作校验内容的正确性,或者通过加盐的hmac做对称数据签名。

为文件生成md5摘要:

robert@robert-ubuntu1410:~$ md5sum test.txt 
23cdc18507b52418db7740cbb5543e54  test.txt



2、sha256

由于md5摘要算法可以通过碰撞的方法进行破解,虽然,碰撞后数据还能符合业务规则的可能性比较小,但是安全无小事,大家都倾向于使用更安全的sha256算法。


通常也用于文件上传和下载操作校验正确性,或者通过加盐的sha256-hmac做对称数据签名。


为文件生成sha256摘要:

robert@robert-ubuntu1410:~$ sha256sum test.txt 
2634c3097f98e36865f0c572009c4ffd73316bc8b88ccfe8d196af35f46e2394  test.txt


3、base64

base64编码是网络上最常见的用于传输8位字节代码的编码方式之一,这种编码可以保证所输出的编码位全都是可读字符,base64制定了一个编码表,以便进行统一转换。编码表共有64个字符,因此称为base64编码。


base64编码把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1个或者2个'='。


把文件内容转化成base64编码:

robert@robert-ubuntu1410:~$ base64 test.txt 
MTIzNDU2NzgK

另外,区块链里面存储秘钥的时候并没有使用base64编码,而是使用了base58编码,去除了肉眼容易混淆的可见字符,例如:去除了'I',因为它和数字'1'相似,去掉了字母'o',因为它和数字0相似,从这里可以看到一款产品是如何从用户的角度思考和设计的。


11

 命令与场景汇总表

_____


本节把本文中介绍的所有的命令收集在一个表格中,称为“命令与场景汇总表”,便于大家随时参考和使用,并推荐大家把这个表格打印出来放在自己的办公桌上,需要的时候看一眼,便可快速发现和解决问题的命令和工具。


序号 命令 使用场景
1 grep 超级强悍的文本查找命令,常用于在大量文件中查找相关的关键词
2 find 查找某些文件,常用来在众多项目中根据文件名查找某些文件
3 uptime 查看操作系统启动的时间、用户、负载等
4 lsof 查看某个进程打开的文件句柄
5 ulimit 查看系统配置的用户对资源使用的限制,例如:打开的最大文件句柄、创建的最大线程数等
6 curl 模拟HTTP协议调用
7 scp 从服务器上下载文件或者上传文件到服务器上
8 vi/vim 在服务器上编辑文件,或者作为开发脚本程序的编辑环境
9 dos2unix & unix2dos 转换windows和unix/linux的换行符
10 ps 查看系统内进程列表,并可以看到内存、CPU的信息
11 top 按照资源使用情况排序显示系统内进程的列表
12 free 查看系统的内存使用情况
13 pmap 查看进程详细的内存分配情况
14 vmstat 查看系统的CPU利用率、负载、内存等信息
15 mpstat 查看系统的CPU利用率、负载,并可以按照CPU核心分别显示信息
16 iostat 查看磁盘IO的信息以及传输速度
17 swapon 查看系统的交换区的使用情况
18 df 显示磁盘挂载的信息
19 ifconfig 显示网卡挂载的信息
20 ping 检测服务器到其他服务器网络连接情况
21 telnet 可以检测某一个服务器的端口是否在正常对外服务
22 nc 模拟开启TCP/IP的服务器,通常用于拦截HTTP协议传递的参数,帮助定位Restful服务的问题
23 mtr 检测网络连通性问题,并可以获取某一个域名或者IP的丢包率
24 nslookup 判断DNS是否能够正确解析域名,以及域名解析到哪个IP地址
25 traceroute 跟踪网络传输的详细路径,显示每一级网关的信息
26 sar 全面的监控网络、磁盘、CPU、内存等信息的轻量级工具
27 netstat(ss) 通常用于查看网络端口的连接情况
28 iptraf 用来获得网络IO的传输速度以及其他的网络状态信息
29 tcpdump 可以拦截本机网卡任何协议的通讯内容,用来调试网络问题
30 nmap 扫描某一服务器打开的端口
31 pstack 打印进程内调用堆栈
32 strace 跟踪进程内工作机制
33 /Proc文件系统 另外一种方法实时查看系统的CPU、内存、IO等信息
34 ab 简单好用的HTTP协议的压测工具
35 jmeter 用于复杂的Java程序的测试工具
36 mysqlslap 用于测试mysql性能的弓弩
37 sysbench 可以用于测试系统IO、网络、CPU、内存等的性能指标,也可以用来测试mysql的各项性能指标
38 dd 磁盘文件拷贝操作
39 md5sum 生成md5摘要
40 sha256 生成sha256摘要
41 base64 生成base64编码

12 

总结经验

_____


本文全面介绍了线上应急和技术攻关必不可少的基础Linux命令和工具,包括:查看活动进程的命令、内存监控命令、CPU使用情况监控命令、磁盘IO监控命令、网络查看和监控命令、Linux系统高级工具、Proc文件系统、性能压测工具、生成摘要的命令和工具等。


在文章末尾,对本文介绍的命令进行了总结,并且汇入了一个表格,表格可以用来帮助查找不同场景使用哪些命令能够解决特定的问题,读者可以把此表格打印出来,放在桌面上,需要的时候瞄一眼,就可以找到相应命令来定位问题。



- End -

本文分享自微信公众号 - IT一刻钟(it_info)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部