author:skate
time:2011-03-09

   
   
这是我总结的关于linux环境和性能相关的命令,以备查询

内容:

一.             命令详解

二.             识别cpu/io/内存/network瓶颈,及决方法啊

 

常用的和性能有关的命令

Iostat/vmstat/top/mpstat/time/strace/ipcs/ipcrm/ifconfig/tethereal/netstat/free/uptime

 

 

一.命令详解

 

1.       Top命令详解:

参考:http://bbs.linuxtone.org/thread-1684-1-1.html

 

[root@localhost ~]# top

 

top - 12:08:54 up 1 day, 21:06,  2 users,  load average: 0.16, 0.11, 0.06

Tasks: 123 total,   2 running, 121 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 99.9% id,  0.0% wa,  0.0% hi,  0.0% si

Mem:   8173076k total,  3188184k used,  4984892k free,   147472k buffers

Swap: 10223608k total,        0k used, 10223608k free,  2833104k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                      

    1 root      16   0  4772  564  468 S  0.0  0.0   0:01.34 init                          

    2 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/0                  

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                  

    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/1                  

    5 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1                  

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/2                  

    7 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/2                  

    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/3                  

    9 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/3                  

   10 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/4                  

   11 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/4                  

   12 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/5                  

   13 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/5                  

   14 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/6                  

   15 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/6                   

   16 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/7                  

   17 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/7

 

 

 

top命令Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.

 

默认情况下仅显示比较重要的  PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 列。可以通过下面的快捷键来更改显示内容。

 

1.     更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z  即可显示或隐藏对应的列,最后按回车键确定。

 

2.     o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z  可以将相应的列向左移动。最后按回车键确定。

 

 

3.     按大写的 F O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的  R 键可以将当前的排序倒转。

 

 

统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime  命令的执行结果。其内容如下:

 

12:08:54

当前时间

up 1 day, 21:06

系统运行时间,格式为时:

2 user

当前登录用户数

load average: 0.16, 0.11, 0.06

系统负载,即任务队列的平均长度。
            
三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。

 

 

第二、三行为进程和CPU的信息。当有多个CPU时,通过按键“1“可以在总cpu和每个cpu信息之间切换,这些内容可能会超过两行。内容如下:

 

Tasks: 123 total

进程总数

2 running

正在运行的进程数

121 sleeping

睡眠的进程数

0 stopped

停止的进程数

0 zombie

僵尸进程数

Cpu(s): 0.0% us

用户空间占用CPU百分比

0.0% sy

内核空间占用CPU百分比

0.0% ni

用户进程空间内改变过优先级的进程占用CPU百分比

99.9% id

空闲CPU百分比

0.0% wa

等待输入输出的CPU时间百分比

0.0% hi

 

0.0% si

 

 

最后两行为内存信息。内容如下:

 

Mem:   8173076k total

物理内存总量

3188184k used

使用的物理内存总量

4984892k free

空闲内存总量

147472k buffers

用作内核缓存的内存量

Swap: 10223608k total

交换区总量

0k used

使用的交换区总量

10223608k free

空闲交换区总量

2833104k cached

缓冲的交换区总量。
            
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
            
该数值即为这些
内容已存在于内存中的交换区的大小。
            
相应的内存再次被换出时可不必再对交换区写入。

 

 

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号

列名

含义

a

PID

进程id

b

PPID

父进程id

c

RUSER

Real user name

d

UID

进程所有者的用户id

e

USER

进程所有者的用户名

f

GROUP

进程所有者的组名

g

TTY

启动进程的终端名。不是从终端启动的进程则显示为 ?

h

PR

优先级

i

NI

nice值。负值表示高优先级,正值表示低优先级

j

P

最后使用的CPU,仅在多CPU环境下有意义

k

%CPU

上次更新到现在的CPU时间占用百分比

l

TIME

进程使用的CPU时间总计,单位秒

m

TIME+

进程使用的CPU时间总计,单位1/100

n

%MEM

进程使用的物理内存百分比

o

VIRT

进程使用的虚拟内存总量,单位kbVIRT=SWAP+RES

p

SWAP

进程使用的虚拟内存中,被换出的大小,单位kb

q

RES

进程使用的、未被换出的物理内存大小,单位kbRES=CODE+DATA

r

CODE

可执行代码占用的物理内存大小,单位kb

s

DATA

可执行代码以外的部分(数据+)占用的物理内存大小,单位kb

t

SHR

共享内存大小,单位kb

u

nFLT

页面错误次数

v

nDRT

最后一次写入到现在,被修改过的页面数。

w

S

进程状态。
            
D=不可中断的睡眠状态
            
R=运行
            
S=睡眠
            
T=跟踪/停止
            
Z=僵尸进程

x

COMMAND

命令名/命令行

y

WCHAN

若该进程在睡眠,则显示睡眠中的系统函数名

z

Flags

任务标志,参考 sched.h

2.    vmstat命令详解

 

[root@localhost ~]# vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

 1  0      0 4886396 147552 2905036    0    0     1     4    4     3  0  0 100  0

 0  0      0 4886396 147552 2905036    0    0     0   228 4144  4103  1  1 98  0

 0  0      0 4886396 147552 2905036    0    0     0    88 1964  1286  0  0 99  0

 0  0      0 4886396 147552 2905036    0    0     0   100 2321  2007  1  0 99  0

 1  0      0 4886332 147552 2905036    0    0     0   156 2647  2265  1  0 99  0

[root@localhost ~]#

 

 

 

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

              -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是一个相当全面的性能分析工具,可以观察到系统进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下问切换、CPU使用等性能信息

 

 

   Procs

       r: The number of processes waiting for run time.运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于cpu个数)

       b: The number of processes in uninterruptible sleep.处于不可中断状态的进程数,这个值一般为2-3cpu的个数就表明cpu排队比较严要了,常见的情况是由IO引起的

 

 

   Memory

       swpd: the amount of virtual memory used.现在已经使用的虚拟内存,单位k

       free: the amount of idle memory.空闲物理内存,单位k

       buff: the amount of memory used as buffers.作为buffer使用的物理内存,对块设备读写进行缓冲,单位k

       cache: the amount of memory used as cache. 作为cache使用的物理内存,对文件系统的缓冲,单位k

       inact: the amount of inactive memory. (-a option) (没有活动的物理内存,单位k

       active: the amount of active memory. (-a option) (有活动的物理内存,单位k

 

buffercache的区别:

buffers are only used for file metadata (inodes, etc) and data from raw block devices. It's accessed via block device and block number.
Cache has file data blocks, and memory mapped information (i.e. files mapped with mmap() calls). It's accessed primarily via inode number.
  So, the main difference would be scope, One's more concerened with blocks on a device, the other with information in a file.

 buffer and cache both can flush to disk, however. The buffer to the device file and the cache through the file system layer to the block device.   

 

   Swap

       si: Amount of memory swapped in from disk (k/s). (每秒由磁盘调入内存的数量)

       so: Amount of memory swapped to disk (k/s). (每秒由内存调入磁盘的数量)

 

   IO

       bi: Blocks received from a block device (blocks/s). (从块设备读入的数据块数量)

       bo: Blocks sent to a block device (blocks/s).  (写到块设备的数据块数量)

如果这两个值比较大,说明io的压力也较大,cpuio的等待可能也会大

 

   System

       in: The number of interrupts per second, including the clock. (每秒产生中断的次数)

       cs: The number of context switches per second.(每秒产生上下文切换的次数)

这个两个值比较大说明,说明消耗内核上cpu较多,可能不合理的使用cpu

 

 

   CPU

       These are percentages of total CPU time.

       us: Time spent running non-kernel code. (user time, including nice time) (用户进程使用cpu的时间)

       sy: Time spent running kernel code. (system time) (内核进程使用cpu的时间)

       id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.(空闲事件使用cpu的时间,这个值越小,说明cpu可能很忙)

       wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero. (等待io使用cpu的时间)

 

 

3.       iostat命令详解

 

iostat用于监控cpu的统计信息和磁盘的统计信息

 

[oracle@localhost ~]$ iostat

Linux 2.6.9-78.ELsmp (localhost)        09/29/2010

 

avg-cpu:  %user   %nice    %sys %iowait   %idle

           0.18    0.00    0.08    0.02   99.72

 

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               8.48        26.06       111.87    6429617   27601457

sda1              0.00         0.00         0.00        628          0

sda2              0.00         0.01         0.00       1654         33

sda3              8.48        26.05       111.87    6426351   27601424

dm-0             14.65        26.04       111.87    6425698   27601424

dm-1              0.00         0.00         0.00        360          0

 

 

cpu的统计信息,如果是多cpu系统,显示的所有cpu的平均统计信息。

 

%user:用户进程消耗cpu的比例

%nice:用户进程优先级调整消耗的cpu比例

%sys:系统内核消耗的cpu比例

%iowait:等待磁盘io所消耗的cpu比例

%idle:闲置cpu的比例(不包括等待磁盘ios

 

磁盘的统计信息:

 

Device:设备的名称

Tps:设备上每秒的io传输(可能多个io被组成一个io)的次数

Blk_read/s:每秒从设备读取blockkernel 2.4以上,block=512byte)的数量

Blk_wrtn/s:每秒写到设备blockkernel 2.4以上,block=512byte)的数量

Blk_read:间隔时间内,从设备读取总的block数量

Blk_wrtn:间隔时间内,写到设备总的block数量

 

 

默认iostat不带任何参数显示的是概要信息,如果要看更比较详细的信息,可以用“iostat –x“,例子如下:

 

 

[root@localhost ~]# iostat -x

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

avg-cpu:  %user   %nice    %sys %iowait   %idle

           0.14    0.00    0.07    0.01   99.78

 

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda          0.04   5.08  0.46  6.74   19.21   94.55     9.60    47.27    15.80     0.01    0.93   0.18   0.13

sda1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    26.17     0.00    3.08   2.83   0.00

sda2         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    17.57     0.00    0.99   0.84   0.00

sda3         0.03   5.08  0.46  6.74   19.20   94.55     9.60    47.27    15.80     0.01    0.93   0.18   0.13

dm-0         0.00   0.00  0.49 11.82   19.19   94.55     9.60    47.27     9.24     0.36   29.58   0.11   0.13

dm-1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     8.00     0.00    6.22   0.62   0.00

 

字段说明:

 

rrqm/s每秒进行merge(多个io的合并)读操作的数量

wrqm/s每秒进行merge(多个io的合并)写操作的数量

r/s每秒完成读io设备的次数

w/s每秒完成写io设备的次数

rsec/s每秒读扇区的次数

wsec/s每秒写扇区的次数

rkB/s每秒读多少k字节,在kernel2.4以上,rkB/s=2×rsec/s,因为一个扇区为512bytes

wkB/s每秒写多少k字节,在kernel2.4以上,wkB/s =2×wsec/s,因为一个扇区为512bytes

avgrq-sz平均每次io设备的大小(以扇区为单位),因为有merge读或写,所以每次io大小需要计算

avgqu-sz平均I/O队列长度

await每次io设备的等待时间,也包括io服务时间(毫秒)。

await的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式
如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;
如果 await 远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢,
如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水

 

svctm每次io设备的服务时间(毫秒),它的大小一般和磁盘性能有关:CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加

 

%util处理io操作的cpu比例,如果这个着接近100%,说明io请求非常多,cpu的所有时间都用来处理io请求,io系统负载很大(也有可能cpu资源不足),磁盘可能存在瓶颈;在%util等于70%的时候,io的读取就会有很多等待。

 

 

下面是别人写的这个参数输出的分析
# iostat -x 1
avg-cpu:  %user   %nice    %sys   %idle
16.24    0.00    4.31   79.44
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
/dev/cciss/c0d0
0.00  44.90  1.02 27.55    8.16  579.59     4.08   289.80    20.57    22.35   78.21   5.00  14.29
/dev/cciss/c0d0p1
0.00  44.90  1.02 27.55    8.16  579.59     4.08   289.80    20.57    22.35   78.21   5.00  14.29
/dev/cciss/c0d0p2
0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

 


上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: IO(io)/s = r/s() +w/s() = 1.02+27.55 = 28.57 (/) 其中写操作占了主体 (w:r = 27:1)


平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 ),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数

应用到上面的例子: 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。


每秒发出的 I/O 请求很多 ( 29 ),平均队列却不长 (只有 2 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。


一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 I/O 请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s=78.21 * delta(io)/s = 78.21*28.57 =2232.8
,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bugavgqu-sz值应为 2.23,而不是 22.35

 

 

 

4.       sar命令详解

 

sar的常用参数:

-A:所有报告的总和。
-u
CPU利用率
-v
:进程、I节点、文件和锁表状态。
-d
:硬盘使用报告。
-r
:内存和交换空间的使用统计。
-g
:串口I/O的情况。
-b
:缓冲区使用情况。
-a
:文件读写情况。
-c
:系统调用情况。
-q
:报告队列长度和系统平均负载
-R
:进程的活动情况。
-y
:终端设备活动情况。
-w
:系统交换活动。
-x { pid | SELF | ALL }
:报告指定进程ID的统计信息,SELF关键字是sar进程本身的统计,ALL关键字是所有系统进程的统计

 

 

 

查看cpu

[root@localhost ~]# sar -u 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:08:27 PM       CPU     %user     %nice   %system   %iowait     %idle

06:08:28 PM       all      0.00      0.00      0.00      0.00    100.00

06:08:29 PM       all      0.00      0.00      0.12      0.00     99.88

06:08:30 PM       all      0.00      0.00      0.00      0.00    100.00

 

06:08:30 PM       CPU     %user     %nice   %system   %iowait     %idle

06:08:31 PM       all      0.00      0.00      0.00      0.00    100.00

06:08:32 PM       all      0.00      0.00      0.00      0.00    100.00

Average:          all      0.00      0.00      0.02      0.00     99.98

 

在显示内容包括:

  %userCPU处在用户模式下的时间百分比。
    %niceCPU处在带NICE值的用户模式下的时间百分比。
  %systemCPU处在系统模式下的时间百分比。
  %iowaitCPU等待输入输出完成时间的百分比。
    %idleCPU空闲时间百分比。
        在所有的显示中,我们应主要注意%iowait%idle%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU

 

 

查看io

[root@localhost ~]# sar -b 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:10:06 PM       tps      rtps      wtps   bread/s   bwrtn/s

06:10:07 PM      0.00      0.00      0.00      0.00      0.00

06:10:08 PM      3.00      0.00      3.00      0.00     48.00

06:10:09 PM      2.00      0.00      2.00      0.00    112.00

 

06:10:09 PM       tps      rtps      wtps   bread/s   bwrtn/s

06:10:10 PM     21.78      0.00     21.78      0.00    213.86

06:10:11 PM      3.00      0.00      3.00      0.00     48.00

Average:         5.99      0.00      5.99      0.00     84.63

 

查看物理内存和swap空间使用信息

[root@localhost ~]# sar -r 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:12:21 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

06:12:22 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

06:12:23 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

06:12:24 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

 

06:12:24 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

06:12:25 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

06:12:26 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

Average:      1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

 

 

 

查看网卡流量统计

root@localhost ~]# sar -n EDEV 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:18:22 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:23 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:23 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:23 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:23 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:23 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:24 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:24 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:24 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:24 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:24 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:25 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:25 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:25 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:25 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:25 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:26 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:26 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:26 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:26 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:26 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:27 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:27 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:27 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:27 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

Average:        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

 

查看运行进程队列长度

[root@localhost ~]# sar -q 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

08:00:04 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15

08:00:05 PM         0       127      0.02      0.16      0.10

08:00:06 PM         0       127      0.02      0.16      0.10

08:00:07 PM         0       127      0.02      0.16      0.10

 

08:00:07 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15

08:00:08 PM         0       127      0.02      0.16      0.10

08:00:09 PM         0       127      0.01      0.16      0.10

Average:            0       127      0.02      0.16      0.10

 

字段说明:

runq-sz 准备运行的进程运行队列。
plist-sz  进程队列里的进程和线程的数量
ldavg-1  前一分钟的系统平均负载(load average)
ldavg-5  前五分钟的系统平均负载(load average)
ldavg-15  15分钟的系统平均负载(load average)

 

一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。负载/cpu数量,表示每个cpu的活动进程数

 

 

5.       ps命令详解

ps用户查看进程的相关信息,和top类似

 

查看系统当前运行的所有进程

ps –ef ps auxw

其中参数a表示显示系统中所有用户的的进程;u表示输出进程用户所属信息; x表示也显示没有控制台的进程;w表示加宽可以显示较多的资讯;若显示行太长而被截断则可以使用f参数

 

 

[root@localhost ~]# ps -auxw|more

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0  4772  564 ?        S    Sep26   0:01 init [5]                                        

                 

root         2  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/0]

root         3  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/0]

root         4  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/1]

root         5  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/1]

root         6  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/2]

root         7  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/2]

root         8  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/3]

root         9  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/3]

root        10  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/4]

root        11  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/4]

 

字段说明:

USER: 行程拥有者
PID: pid
%CPU:
占用的 CPU 使用率

%MEM:
占用的记忆体使用率

VSZ:
占用的虚拟记忆体大小

RSS:
占用的记忆体大小

TTY:
终端的次要装置号码
(minor device number of tty)
STAT:
该行程的状态
:
     D:
不可中断的静止 (通悸□□b进行 I/O 动作
)
     R:
正在执行中

     S:
静止状态

     T:
暂停执行

     Z:
不存在但暂时无法消除

     W:
没有足够的记忆体分页可分配

     <:
高优先序的行程

     N:
低优先序的行程

     L:
有记忆体分页分配并锁在记忆体内 (即时系统或捱
A I/O)
START:
行程开始时间

TIME:
执行的时间

COMMAND:
所执行的指令

 

 

 

6.    time命令详解

查看命令运行的时间

 

[root@localhost ~]# time ps -ef | wc -l

134

 

real    0m0.009s

user    0m0.004s

sys     0m0.006s

 

7.    pstree命令详解

显示进程的树形结构

 

[root@localhost ~]# pstree |more

init─┬─acpid

     ├─atd

     ├─crond

     ├─cups-config-dae

     ├─cupsd

     ├─dbus-daemon-1

     ├─dhclient

     ├─events/0─┬─aio/0

               ├─aio/1

               ├─aio/2

               ├─aio/3

               ├─aio/4

               ├─aio/5

               ├─aio/6

               ├─aio/7

               ├─kacpid

               ├─kblockd/0

               ├─kblockd/1

               ├─kblockd/2

               ├─kblockd/3

               ├─kblockd/4

               ├─kblockd/5

               ├─kblockd/6

               ├─kblockd/7

--More—

 

8.    进程的跟踪命令介绍

 

进程无法启动,软件运行速度突然变慢,程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,可以用这些进程跟踪命令来诊断(在aix上有类似gdb命令)

 

trussstrace:用来跟踪一个进程的系统调用或信号产生的情况,

ltrace:用来跟踪进程调用库函数的情况。

 

 

这三个命令的用户基本相同,介绍下常用的参数

 

-f :除了跟踪当前进程外,还跟踪其子进程。
-o file
:将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。
-p pid
:绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。

-e execve :只记录 execve 这类系统调用

 

 

9.    网络相关命令

 

ifconfig               # 查看所有网络接口的属性

netstat -lntp          # 查看所有监听端口

netstat -antp          # 查看所有已经建立的连接

netstat -s             # 查看网络统计信息进程

tethereal

 

iptraf:可以监控网络流量

 

安装方式:

1.官网及下载 http://iptraf.seul.org/download.html

2. get ftp://iptraf.seul.org/pub/iptraf/iptraf-3.0.0.tar.gz

3. yum install -y iptraf

 

 

 

 

 

 

带说明:

 

10IpcsIpcrm命令详解

 

Ipcsipcrm是管理System V IPC对象的(消息、信号量(semaphores)和共享内存),在日常工作中,有时会遇到共享内存无法释放。这个时候就可以通过ipcs查询,ipcrm删除

样例:

ipcs [-m|-q|-s]

-m      输出有关共享内存(shared memory)的信息

-q      输出有关信息队列(message queue)的信息

-s      输出有关“遮断器”(semaphore)的信息

#ipcs -m

 

删除ipc

ipcrm -m|-q|-s shm_id

#ipcrm -m 105

 

参考:http://www.52rd.com/Blog/Detail_RD.Blog_wqyuwss_6519.html

 

 

性能分析分类汇总:

进程性能分析相关的命令:

toppspstree

 

Cpu性能分析相关命令:

vmstatsartimetop

 

Memory性能分析相关命令:

vmstattopipcsipcrmcat /proc/meminfocat /proc/slabinfocat /proc/<pid #>/maps

 

io性能分析相关命令:

vmstatiostat

 

网络性能分析相关命令:

Ifconfignetstattetherealsar –n EDEV

 

 

 

 

 

 

 

 

二.             识别cpu/io/内存/network瓶颈,及决方法啊

 

1.       识别cpu性能瓶颈

 

衡量Cpu性能指标:

 

1 用户使用CPU的情况;
CPU运行常规用户进程

CPU运行niced process
CPU
运行实时进程

2. 系统使用CPU情况;
用于I/O管理:中断和驱动
用于内存管理:页面交换
用户进程管理:进程开始和上下文切换

3WIO:用于进程等待磁盘I/O而使CPU处于空闲状态的比率。

4CPU的空闲率,除了上面的WIO以外的空闲时间

5CPU用于上下文交换的比率

6nice

7real-time

8.运行进程队列的长度

9.平均负载

 

用于查看cpu性能的命令有:vmstatiostatsartopstrace

既然已经知道cpu性能指标了,那就用命令查看确认

 

步骤一:先用vmstat查看系统的cpu整体运行状况

 

[root@localhost ~]# vmstat -n 1 10

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

 0  0      0 1282844 176332 6389000    0    0     1     6   10     8  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0     0 1028   120  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0     8 1011    41  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0    28 1033   146  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0    40 1009    31  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0     0 1048   156  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0    24 1010    35  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0     0 1026   119  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0     0 1017    63  0  0 100  0

 0  0      0 1282844 176332 6389000    0    0     0    24 1032   141  0  0 100  0

 

红色的字表是和cpu性能有关的

r: 如果在procs中运行的序列(process r)是连续的大于在系统中的CPU的个数,表示cpu比较忙,系统现在运行比较慢,有多数的进程等待CPU.如果r的输出数大于系统中可用CPU个数的4的话, 则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.

b : 如果在procs中运行的序列(process b), 即处于不可中断状态的进程数,连续我为cpu2-3倍就表明cpu排队比较严要了

 

SYSTEM
in:每秒产生的中断次数
cs:每秒产生的上下文切换次数
上面2个值越大,会看到由内核消耗的CPU时间会越大

 

CPU
us:用户进程消耗的CPU时间百分,

us的值比较高时,说明用户进程消耗的CPU时间多,在服务高峰期持续大于5060,是可以接受但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速

 

sy: 内核进程消耗的CPU时间百分比

sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因

wa: IO等待消耗的CPU时间百分比
wa
的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

id:CPU处于空闲状态时间百分比,如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺. 服务高峰期持续小于50,可以接受

 

通过这个命令可以观察cpu性能的结果是:

A.如果r连续大于cpu的个数,甚至几倍cpu个数;b也有持续有值,甚至cpu2-3倍,并且id也持续小于50%wa也比较小,这就表明cpu符合很严重。

B  再详细确认可以用:sar -u 1 5sar -q 1 5可以观察cpu的使用率和cpu运行进程队列长度及负载。

C 如果想再看看具体是什么进程在消耗cpu,就要使用命令topps –auxw | more

D 如果知道了某个进程消耗大量的cpu,想主要知道这个进程在做成什么,那就用命令:strace

 

 

2.识别memory性能瓶颈

 

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer CachePage Cache.前者针对磁盘块的读写,后者针对文件inode的读写.这些Cache有效缩短了I/O系统调用(比如read,write,getdents)的时间.
      
内存活动基本上可以用3个数字来量化:活动虚拟内存总量,交换(swapping)率和调页(paging).其中第一个数字表明内存的总需求量,后两个数字表示那些内存中有多少比例正处在使用之中.目标是减少内存活动或增加内存量,直到调页率保持在一个可以接受的水平上为止.
     
活动虚拟内存的总量(VM)=实际内存大小(size of real memory)(物理内存)+使用的交换空间大小(amount of swap space used)


    
当程序运行需要的内存大于物理内存时,UNIX系统采用了调页机制,即系统copy一些内存中的页面到磁盘上,腾出来空间供进程使用。


大多数系统可以忍受偶尔的调页,但是频繁的调页会使系统性能急剧下降。


UNIX
内存管理UNIX系统通过2种方法进行内存管理,调页算法交换技术


调页算法:是将内存中最近不常使用的页面换到磁盘上,把常使用的页面(活动页面)保留

在内存中供进程使用。
交换技术:是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发

生一些交换过程。


当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘I/O的负载。进一步降低了系统对作业的执行速度,即系统I/O资源问题又会影响到内存资源的分配。


Unix
的虚拟内存
Unix
的虚拟内存是一个十分复杂的子系统,它实现了进程间代码与数据共享机制的透明性,并能够分配比系统现有物理内存更多的内存,某些操作系统的虚存甚至能通过提供缓存功能影响到文件系统的性能,各种风格的UNIX的虚存的实现方式区别很大,但都离不开下面的4个概念。


1:
实际内存
实际内存是指一个系统中实际存在的物理内存,称为RAM。实际内存是存储临时数据最快最有效的方式,因此必须尽可能地分配给应用程序,现在的RAM的形式有多种:SIMMDIMMRambusDDR等,很多RAM都可以使用纠错机制(ECC)。


2:
交换空间
交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。


3:
页面调度
页面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Unix内存被平均划分成大小相等的页面;通常页面大小为4KB8KB(在Solaris中可以用pagesize命令查看)。当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM交给其他需要它的程序使用。


4:
交换
页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。

 

[root@ticketA ~]# vmstat 1 10

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

 2  0  81616 105616 122168 31284140    1    1    16    24    0     0  2  0 98  0

 3  0  81616 105616 122168 31284140    0    0     0    12 5594  4285  3  1 96  0

 2  0  81616 105616 122172 31284136    0    0     0    16 5574  4176  3  1 96  0

 1  0  81616 105552 122172 31284136    0    0     0   108 5545  4329  3  1 96  0

 3  0  81616 105360 122172 31284136    0    0     0    36 5533  4195  3  1 96  0

 0  0  81616 105360 122180 31284128    0    0     0    60 5538  4341  3  1 96  0

 0  0  81616 105360 122180 31284128    0    0     0    48 5473  4179  3  1 96  0

 1  0  81616 105360 122180 31284128    0    0     0     8 5553  4299  3  1 96  0

 0  0  81616 105360 122180 31284128    0    0     0    20 5608  4231  3  1 96  0

 0  0  81616 105360 122180 31284128    0    0     0    60 5585  4285  3  0 96  0

 

 

MEMORY
-swap:
切换到交换内存上的内存(默认以KB为单位)
如果SWAP的值不为0,或者还比较大,比如超过100M了,但是SISO的值长期为0,这种情况我们可以不用担心,不会影响系统性能。-free:空闲的物理内存

- buff:
作为buffer cache的内存,对块设备的读写进行缓冲
- cache
:作为page cache的内存,文件系统的cache
如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

SWAP
-si:
交换内存使用,由磁盘调入内存
-so:
交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IOCPU资源都会被消耗。
我发现有些朋友看到空闲内存(FREE)很少的或接近于0时,就认为内存不够用了,实际上不能光看这一点,Linux是抢占内存式的OS,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

 

 

3.识别io性能瓶颈

 

首先用命令vmstat大概了解系统状况

 

[root@localhost ~]# vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

 0  0      0 1225516 176836 6452620    0    0     0     4    3     3  0  0 100  0

 0  0      0 1225524 176836 6452620    0    0     0    32 1021    66  0  0 100  0

 0  0      0 1225524 176836 6452620    0    0     0     0 1028   122  0  0 100  0

 0  0      0 1225524 176836 6452620    0    0     0    40 1009    36  0  0 100  0

 0  0      0 1225524 176836 6452620    0    0     0     0 1028   124  0  0 100  0

 

如果b的值为2-3cpu数量,bibo的值很大(有时bibo值很小,但incs很大,也会引起磁盘io负载重),wa的值持续很高,如高于40id也持续高于70,这些现象都表明系统的io可能出现性能问题。可以进一步通过iostat命令分析。

 

root@localhost ~]# iostat -x 1 5

Linux 2.6.9-78.ELsmp (localhost)        10/08/2010

 

avg-cpu:  %user   %nice    %sys %iowait   %idle

           0.07    0.00    0.03    0.01   99.89

 

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda          0.01   3.26  0.16  4.36    6.42   60.99     3.21    30.49    14.91     0.00    0.56   0.16   0.07

sda1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    26.17     0.00    3.08   2.83   0.00

sda2         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    17.57     0.00    0.99   0.84   0.00

sda3         0.01   3.26  0.16  4.36    6.42   60.99     3.21    30.49    14.91     0.00    0.56   0.16   0.07

dm-0         0.00   0.00  0.17  7.62    6.42   60.99     3.21    30.49     8.65     0.12   15.45   0.09   0.07

dm-1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     8.00     0.00    6.22   0.62   0.00

 

查看iostat的结果,首先看%util(服务io的时间占总时间的百分比),如果这个值接近100%,表示io的请求很多(表示任务服务的所有时间几乎都用在io上),这种现象表明磁盘io性能出现瓶颈。

再看await(表示每次io设备等待时间)和svctm(表示每次io设备服务时间,一般性能越好的磁盘,这个值越小)。

如果svctm接近await,说明io几乎没有等待,每个io设备都得到及时的响应

如果svctm远小于await,说明io等待队列可能很长,io的得到服务的时间将延长(排队+服务时间)。

 

avgqu-sz表示io排队的现象,如果排队过长会影响io的响应时间

 

r/s+w/s:可以计算当前系统的iops(可以结合硬盘的测试或者硬件参数来衡量是否超过磁盘的iops最大值)

 

 

4.网络性能识别与分析

 

可以通过命令netstatiptraf命令来识别

 

可以通过ifconfignetstat连接网络基本情况

 

ifconfig               # 查看所有网络接口的属性

netstat -lntp          # 查看所有监听端口

netstat -antp          # 查看所有已经建立的连接

netstat -s             # 查看网络统计信息进程

 

iptraf连接网络的速率,如果网络的带宽达到极限,那一般系统的支持的进程数或者最大连接数也会成为瓶颈

 

 

知道哪有问题了,接下来就是调整了,调整的方法如下:

 

Cpu的调整:

一般在cpuwa小于5%就需要调整cpu,调整的相关参数在目录下:/proc/sys/kernel/;一边调整参数threads-maxpid_max,如下:

[root@localhost ~]# sysctl kernel.pid_max

kernel.pid_max = 32768

[root@localhost ~]# sysctl kernel.pid_max=32769

kernel.pid_max = 32769

 

memory调整:

当出现严重的换页现象,应该注意内存不足的影响

1. 关闭不必要的非核心进程

 

2. 调整/proc/sys/vm/下的系统参数

 

保证linux有足够的物理内存,可以调整vm的如下参数

 

vm.min_free_kbytes=409600;//默认值是3797,保证物理内存有足够空闲空间,防止突发性换页

vm.vfs_cache_pressure=200//默认是100,增大这个参数设置了虚拟内存回收directoryi-node缓冲的倾向,这个值越大。越易回收

vm.swappiness=40 //缺省60,减少这个参数会使系统尽快通过swapout不使用的进程资源来释放更多的物理内存

3. 配置较大的swap,一般为物理内存2

 

 

Io的调整:

1.       负载平衡,磁盘io均分

2.       启用异步io

查看是否启用异步io

[root@localhost ~]# cat /proc/slabinfo |grep kio

kioctx 0  0    384   10    1 : tunables   54   27    8 : slabdata      0      0      0

kiocb 0 0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0

 

3.       块设备调大预读扇区readahead

[root@localhost ~]# blockdev --report

RO    RA   SSZ   BSZ   StartSec     Size    Device

rw   256   512  4096          0  570949632  /dev/sda

rw   256   512  1024         63      80262  /dev/sda1

rw   256   512  1024      80325     208845  /dev/sda2

rw   256   512   512     289170  570644865  /dev/sda3

rw   256   512  4096     289170  550109184  /dev/dm-0

rw   256   512  4096     289170   20447232  /dev/dm-1

[root@localhost ~]# blockdev --setra 2048 /dev/sda1

[root@localhost ~]# blockdev --report

RO    RA   SSZ   BSZ   StartSec     Size    Device

rw  2048   512  4096          0  570949632  /dev/sda

rw  2048   512  1024         63      80262  /dev/sda1

rw  2048   512  1024      80325     208845  /dev/sda2

rw  2048   512   512     289170  570644865  /dev/sda3

rw   256   512  4096     289170  550109184  /dev/dm-0

rw   256   512  4096     289170   20447232  /dev/dm-1

 

4.       调整vm相关参数

 

 改善io系统的性能的vm参数

overcommit_memory = 0

vm.overcommit_ratio = 10 //默认值是50,用于虚拟内存的物理内存的百分比

vm.dirty_ratio = 20 //默认值是40,为了保持稳定,持续的写入,把这个值调整的小一些,经验值是20

vm.dirty_background_ratio //缺省数值是500,也就是5,如果系统要求稳定持续的写,可以适当降低该值,把峰值的写操作平均多次,也避免宕机丢失更多的数据

vm.dirty_expire_centisecs //缺省是3000,也就是30,如果系统写操作压力很大,可以适当减小该值,但也不要太小;建议设置为 1500

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐