Linux部署私钥实现免密登录

第一步,生成密钥对(windows或linux均可):

ssh-keygen

之后一路回车,默认不设密码,默认目录为 ~/.ssh

第二步,部署公钥至服务器端(Linux),并赋权限

cat id_rsa.pub >> authorized_keys
sudo chmod 600 authorized_keys
sudo chmod 700 ~/.ssh
  • id_rsa.pub 替换为你的公钥路径即可,如果是在本地生成需上传至服务器端。
  • 这项操作可以部署多个公钥,命令会在 authorized_keys 后面追加,而 Linux 公钥验证检测 authorized_keys 文件中的公钥
  • 一个萝卜一个坑,一个公钥只运行一个用户使用登录

第三步,检查密钥登陆功能是否开启

1、打开SSH配置文件

sudo vim /etc/ssh/sshd_config

2、查看确认下面两项配置

RSAAuthentication yes
PubkeyAuthentication yes
  • 当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录(可选)
PasswordAuthentication no

3、重启SSH

sudo service sshd restart

第四步,检查本地私钥部署

如果客户端为windows,您的私钥应存在于 C:\Users\your name\.ssh\ 目录下,或是在登陆时指定私钥地址:

$ ssh -i id_rsa remote-username@remote-ip

如果是使用 VS Code 远程连接则需要在配置中指定私钥地址:

Host Ali-Dev-Test
  HostName *.*.*.*
  User root
  IdentityFile "H:\我的云端硬盘\Security\ssh-key\aliyun-frytea-edu-t5.pem"

第五步,enjoy it!

参考文献

《断舍离》十句感触

作者: 山下英子 出版社: 广西科学技术出版社 原作名: 新・片づけ術「断捨離」 译者: 吴倩 出版年: 2013-7-30 页数: 192 定价: CNY 32.00 装帧: 平装 丛书: 山下英子 断舍离 ISBN: 9787807639817

阅读完《断舍离》,脑中产生19个想法,对于我这样一个涉事未深之人确也产生了一些影响,至少在当下的生活中,已经在践行着这一切,做到了在“入”口践行“断舍离”,一件物品如果三次遇见都有强烈的需求感,且在日常生活中产生多次需求感,就可以“入”。而一件物品,如果长时间搁置,就必须要考虑“出”。福尔摩斯说,人的头脑就像一个阁楼,里面堆放着物品,如果阁楼里堆满了不需要的杂物,那寻找有用物品就会很困难,因此他会“定时清理”(《爱情公寓》中的吕子乔貌似也有同样的本领?)。

https://imagehost-cdn.frytea.com/20200719170005.png

人的居住空间不也是如此,如果被无用的东西堆满,而且还天天都要看着,心情不会好,反之影响的就是工作学习效率和生活质量。如此,在【断舍离的奥义不只是“扔东西”】一章中,作者写下这样一句话:

斩“断”物欲 “舍”弃废物 脱“离”执念

何谓之断舍离,这句话从意义层面扩充了每一个字的含义,这就是断舍离。斩欲望,舍废物,脱执念。其实许多时候的欲望,只是脑中产生的化学反应,静下来思考思考,其实没有这么需要。

https://imagehost-cdn.frytea.com/20200719165839.png

正是这样的欲望被不断满足,生活中出现了许许多多的废物,而后就会很容易产生执念。其实断舍离更注重空间上的。在【◆ 断舍离注重的不是物品,而是空间】一章中,作者写下这句话:

为确保空间的干净整洁,而将物品量尽可能地缩减成最适合的量。

时常在想,我真的需要这么多的物品吗?其实仔细看看,生活中使用率很高的物品,也许只有20%,其实断舍离的目的,更多的是为了整体的感受。如果物品的量超多一个较为舒适的量,就会严重影响人们的情绪,作者在【◆ 家里家外·情绪反差的痛苦】一章中,写下这样一句话:

扔掉不需要的杂物,建立舒适的生活空间,才有可能改变人生

时常谈及“人生”也许不那么好,但想想可能这人生就是每一天去积累起来的。时常做出的努力,常常也是为了改变人生。人生呀,是多有意思的一件事情呢。正如作者在【◆ 人有“获得的自由”,也有“放手的自由”】一章中写道:

那时候起我明白了一个道理:想要的东西得不到,人会难过。但是想扔的东西扔不得,会更痛苦。

有时为了求之不得而痛苦,又有人为了舍而不弃感到痛苦。这件事情在爱情和婚姻之上时常出现。感情的世界微妙而复杂,五十多岁的老大叔谈及爱情也不得不承认“缘分”的奇妙。随着人类寿命的延长,在择偶这件事情上需越发慎重,试想如果你要跟身边的这个人共同度过60年甚至更久的时间,你还会和ta在一起吗。

https://imagehost-cdn.frytea.com/20200719170250.png

说回本书,断舍离究竟如何去实践呢,在【◆ 断舍离,就是扔东西】一章中,作者总结了思维上的和物品上的断舍离,一种是精神层面,一种是物理层面。最后给出几种收纳的方法。方法具体是如何描述,可以去书里寻找答案。

观念上的断舍离 1. 认识现状 2. 停止自我否定 3. 描绘家的具体构想 杂物上的断舍离 1.拿出杂物,俯瞰 2.扔掉“怎么看都是垃圾·废品”的东西 3.以自我·时间为判断基准,考虑自身与物品的“关联度”,再进行取舍 4.以“必要·合适·愉快”为标准进行取舍5.收纳在杂物最适化之后进行 收纳指南 1.“三分法” 2.“7·5·1法” 3.“1 out 1 in法” 4.“one touch法” 5.“自立·自由·自在法”

章节的名字虽然是“断舍离就是扔东西”,但在我看完全书的感受,作者想表达的,其实并不仅仅是“扔东西”这么简单,正如作者在本章还写下了“打扫”的程序:

最正确的“打扫”程序是首先清除那些垃圾、废品,以及不需要·不合适·不愉快的杂物,之后再转而进行杂物收纳,进行“清扫·擦拭·磨刷”。

不难看出,打扫、清除、收纳的前提都是以自身感受为基础的,换言之其实“断舍离”的目的并不仅仅是扔东西让周遭环境更加干净整洁,更重要的是让自己感觉更好,精神世界感受到舒畅,从而改变人生。

https://imagehost-cdn.frytea.com/20200719170339.png

“断舍离”对人生的重塑作用,在【◆ “身体、心灵、生命”机制的回归】一章中有所描述:

断舍离最核心的思想就是“新陈代谢”。我们的居住空间处于代谢(交换)的状态是最理想的,因此,不断地进行“使用所有物,清除无用之物”的循环,才能让居所充满流动感和活力。

人的一天就是在不断“新陈代谢”,正如人们总是“喜新厌旧”。比如就算上等的小龙虾,天天吃也容易不适一样,人们需要一些“新鲜感”,而这“新鲜感”就是在不断地“新旧更替”中不断刷新。

https://imagehost-cdn.frytea.com/20200719170200.png

说了这么多,其实断舍离最根本的目的还是在于帮助一些人重塑人生,在【◆ 遵守三大原则,收获怡然人生】一章中写道:

● 活在当下 ● 结果反馈到自身 ● 给予

作者梳理出可以帮助人们收获更好人生的三大原则,其实在我看来也是一个“从心出发”的过程。有时候我太过为他人着想,反而丢失了本心。其实一切“给予”的前提,都是要从自身出发,先找到自己,活在当下,之后自然而然会有些改变,当我内心变得强大,再去给予。强大的人时常给予,脆弱的人总想拥有。

https://imagehost-cdn.frytea.com/20200719170426.png

断舍离,还有其他妙处,作者在【◆ 断舍离,让人生处处自在怡然】一章中提到了几种婚姻:

● 精神性的结婚 ● 动物性的结婚 ● 社会性的结婚

光看字面,就能窥见一二,精神性婚姻,即使没有结婚证,二人已是“灵魂伴侣”,动物性结婚为了满足繁衍需求,而社会性需求,为了获取社会地位而结婚。当前时代,更多的属于哪一种呢?希望未来的婚姻更多的都是第一种。为爱情而结婚,其实婚姻也许不久,查查历史会发现婚姻的认定方式都有过几次重大的更替,唯爱可以永存。

https://imagehost-cdn.frytea.com/20200719170454.png

最后说到死亡:

癌症,从某种意义上来说是幸福的死亡方式。并不是像心脏病或脑中风这种突然死亡的病症。在死亡来临之前,还有力气来做想做的事情。还能在死亡来临之前,全身心地用力生活。

癌症,不同的类型存活率也不同,世界上也有一种癌症是可以预防的。以胆囊癌为例,胆囊癌的5年生存率不到5%。提起癌症,总令人感觉那么远,又那么近。远到触不可及,近到近在眼前。但比起其他中致死率极高的病症,也许还是幸福的吧。

这一点我与作者观点不一,虽说还有力气可以做事情,但等待死亡的滋味总是不好受的。我想如果有一天自己面对死亡,我会选择坦然面对,独自离开,不惊扰任何人。

https://imagehost-cdn.frytea.com/20200719170625.png

结语:《断舍离》这本书据说在很多国家都卖的很火,作者八年如一日在各地宣传此书。读完之后收益颇多。也许只有读书才是令人增长智慧的直接途径,也是调整生活基调的最佳方式。更多的答案还是去书中寻找,以书为友,愿与您交流更多。

在终端打印地图

无意间突发奇想,能否在终端中打印地图,然后找到了一篇文章介绍,只需运行这行代码:

$ telnet mapscii.me
# 若未安装telnet需安装一下
$ yum install telnet -y
$ sudo apt-get install telnet

就可以看到这幅令人惊艳的地图了:

https://imagehost-cdn.frytea.com/20200718175632.png

居然还支持拖动和缩放

https://imagehost-cdn.frytea.com/20200718175400.png

简直要上天。

参考文献

解决git不小心提交大文件导致无法提交问题

在一次不小心向GitHub提交了一个1GB文件后,出现一个令人崩溃的错误:

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: a22b6b202ddb6da3e2795ca71663de19
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File system_status/test_26457 is 1024.00 MB; this exceeds GitHub's file size limit of 100.00 MB

更崩溃的是,在此之后又进行了几次提交,可不能因为这次手误丢掉几次提交成果呀。
在网上浏览一圈后找到解决方法:

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch system_status/test_26457'

大概原理是,删除大文件,重新生成commit,但运行后又出现问题:

Cannot rewrite branches: You have unstaged changes.

之后找到一种较为暴力的解决方法:

git stash

在网上找到关于这段命令(git 储藏)的使用场景:

  • 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。
  • 使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。
  • 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

解决后,再次修复,重新提交,完成!

$ git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch system_status/test_26457'
Rewrite 11983344a8934d6e9a7a1e225e6d0f6daf3923a4 (15/21)rm 'system_status/test_26457'
Rewrite 49ac22cd47b0504350d3643ff77b09b14f01ed03 (16/21)rm 'system_status/test_26457'
Rewrite 8a721565399d929514e3ed4661ea7c938074eb32 (17/21)rm 'system_status/test_26457'
Rewrite 6e9e291690bdd9923daef62a18d08229dc30a320 (21/21)
Ref 'refs/heads/master' was rewritten
$ git push

参考文献

计算 Linux 内存使用率方法及C实现


通过获取Linux中的 /proc/stat 文件中的内容可以获取系统内存的详细信息:

# cat /proc/meminfo 
MemTotal:        3880404 kB
MemFree:         3182248 kB
MemAvailable:    3396580 kB
Buffers:           39588 kB
Cached:           355616 kB
SwapCached:            0 kB
Active:           318708 kB
Inactive:         252380 kB
Active(anon):     176120 kB
Inactive(anon):      248 kB
Active(file):     142588 kB
Inactive(file):   252132 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        175940 kB
Mapped:            54184 kB
Shmem:               488 kB
Slab:              62040 kB
SReclaimable:      48712 kB
SUnreclaim:        13328 kB
KernelStack:        2672 kB
PageTables:         6080 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1940200 kB
Committed_AS:     615340 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       14160 kB
VmallocChunk:   34359715580 kB
HardwareCorrupted:     0 kB
AnonHugePages:     36864 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       53120 kB
DirectMap2M:     3092480 kB
DirectMap1G:     3145728 kB

各字段含义见下表:

指标 作用
MemTotal 总内存大小
MemFree 空闲内存大小
buffers/cached 磁盘缓存的大小
MemAvailable 可用内存大小
SwapTotal 可用的swap空间的总的大小。
SwapFree 剩余swap空间的大小。
Dirty 需要写入磁盘的内存区大小。
Writeback 正在被写回磁盘的大小。
AnonPages 未映射页的内存大小。
Mapped 设备和文件等映射的大小。
Slab 内核数据结构slab的大小,可以减少申请和释放内存带来的消耗。

注Buffers 和 Cached的区别

Buffers 是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages. cached 是用来给文件做缓冲。

buffers 是值存储目录里面有什么内容,权限等等。 而cached直接用来记忆我们打开的文件,比如先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。 而buffers随时都在增加,比如先后两次使用ls /dev后,就会发现第二次执行的速度会较第一次快。 这就是buffers/chached的区别。

  • 以内核态来讲, buffers  和 cached  是已经被使用的,可用内存就是 MemAvailable

    MemUsed  = MemTotal - MemFree
  • 以用户态来讲,buffers  和 cached  可被分配。

    free = MemFree + Buffers + Cahched
  • 本着监控应用对物理内存使用情况的目的采集,计算方法:

    MemUsedPrec = 100*(MemTotal - MemFree - Buffers - Cahched)/MemTotal

黑洞

    经过一番计算,发现 /proc/meminfo 中的数据无论如何无法与 free 中的内容对应,尤其是在 used 部分。经过一番信息检索,得出一个结论, free 命令中的数值是按照 /proc/meminfo 中的数据,根据一定算法计算所得,并且新版旧版的 free 所输出内容也不一致。因此按照 proc/meminfo 中的数据计算内存使用率是更加精确的。
进一步探索,会发现 Linux 存在一个内存黑洞,在某博主博客找到如下描述:

追踪Linux系统的内存使用一直是个难题,很多人试着把能想到的各种内存消耗都加在一起,kernel text、kernel modules、buffer、cache、slab、page table、process RSS…等等,却总是与物理内存的大小对不上,这是为什么呢?因为Linux kernel并没有滴水不漏地统计所有的内存分配,kernel动态分配的内存中就有一部分没有计入/proc/meminfo中。 —— 《/PROC/MEMINFO之谜

综上原因,计算Linux内存使用率也就没有必要去细扣每个数值的含义了,大致了解如下内容即可:

  • MemTotal:总内存大小
  • MemFree: 空闲内存大小
  • buffers/cached: 磁盘缓存的大小
  • MemAvailable: 可用内存大小

而计算内存使用率只需按照这个方法计算:

实际可挪用的内存数: free+cache+buffer,
实际可使用的内存数: used-cache-buffer (total-free-cache-buffer)。
内存占用率:(total-available) / total * 100 

C实现

同样的, 先定义一个结构体用于存放相关数据:

struct MEM_INFO
{
    unsigned int total;
    unsigned int free;
    unsigned int buffers;
    unsigned int cached;
    unsigned int swap_cached;
    unsigned int swap_total;
    unsigned int swap_free;
    unsigned int available;
};
typedef struct MEM_INFO Mem_info;

之后定义函数,用于获取及计算内存数据:

void  get_mem_occupy (Mem_info *o)
{
    FILE* fpMemInfo = fopen("/proc/meminfo", "r");
    if (NULL == fpMemInfo)
    {
        return ;
    }
    int i = 0;
    int value;
    char name[1024];
    char line[1024];
    int nFiledNumber = 2;
    int nMemberNumber = 5;
    while (fgets(line, sizeof(line) - 1, fpMemInfo))
    {
        if (sscanf(line, "%s%u", name, &value) != nFiledNumber)
        {
            continue;
        }
        if (0 == strcmp(name, "MemTotal:"))
        {
            ++i;
            o->total = value;
        }
        else if (0 == strcmp(name, "MemFree:"))
        {
            ++i;
            o->free = value;
        }
        else if (0 == strcmp(name, "MemAvailable:"))
        {
            ++i;
            o->available = value;
        }
        else if (0 == strcmp(name, "Buffers:"))
        {
            ++i;
            o->buffers = value;
        }
        else if (0 == strcmp(name, "Cached:"))
        {
            ++i;
            o->cached = value;
        }
        if (i == nMemberNumber)
        {
            break;
        }
    }
    // system("free");
    // system("cat /proc/meminfo");
    // printf("MemTotal      : %d\n",o->total);
    // printf("MemFree       : %d\n",o->free);
    // printf("MemAvailable  : %d\n",o->available);
    // printf("MemBuffers    : %d\n",o->buffers);
    // printf("MemCached     : %d\n",o->cached);
    // printf("MemSwapCached : %d\n",o->swap_cached);
    // printf("MemSwapTotal  : %d\n",o->swap_total);
    // printf("MemSwapFree   : %d\n",o->swap_free);
    fclose(fpMemInfo);
}

float cal_mem_occupy(Mem_info *o)
{
    return (100.0 * (o->total - o->available) / o->total);
}

最后调用即可:

    Mem_info omem;
    while(1)
    {
        // printf("-------------------- Mem occupy -------------------\n");
        get_mem_occupy(&omem);
        printf("Mem Usage(%): %8.4f\n", cal_mem_occupy(&omem));
        printf("\n");
    }

参考文献

计算 Linux CPU 利用率

在 Linux 系统中的 /proc/stat 文件中存储了CPU 活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致,以下通过实例来说明数据该文件中各字段的含义。

$ cat /proc/stat 
cpu  1594121 406 1239990 396233700 162305 0 3641 0 0 0
cpu0 761327 194 604191 198151599 83873 0 1789 0 0 0
cpu1 832793 211 635798 198082101 78432 0 1852 0 0 0
intr 985115307 38 10 0 0 58 0 3 0 0 0 0 36 15 0 0 0 0 0 0 0 0 0 0 0 0 2473171 42 0 862348 0 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 1896726060
btime 1592793001
processes 63407
procs_running 1
procs_blocked 0
softirq 191297272 3 90057502 70 10686595 0 0 34 51485476 0 39067592

第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:

参数 解析(单位:jiffies) 当前值
name 设备名。 cpu
user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。 1594121
nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。 406
system 从系统启动开始累计到当前时刻,处于核心态的运行时间。 1239990
idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间。 396233700
iowait 从系统启动开始累计到当前时刻,IO等待时间。 162305
irq 从系统启动开始累计到当前时刻,硬中断时间。 0
softirq 从系统启动开始累计到当前时刻,软中断时间。 3641
stealstolen 从系统启动开始累积到当前时刻,在虚拟环境运行时花费在其他操作系统的时间。 0
guest 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费的时间。 0
guest_nice 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费在nice进程上的时间。 0

注:jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在 linux 中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同 linux 内核可能值有不同,通常在 1ms 到 10ms 之间


totalCpuTime  = user  + nice + system + idle + iowait + irq + softirq + stealstolen + guest + guest_nice 
cpu使用率计算:

  1. 请在一段时间内(推荐:必须大于0s,小于等于1s),获取两次cpu时间分配信息。
  2. 计算两次的cpu总时间:total_2 – total_1
  3. 计算两次的cpu剩余时间:idle_2 – idle_1
  4. 计算两次的cpu使用时间:used = (total_2 – total_1) – (idle_2 – idle_1)
  5. cpu使用率 = 使用时间 / 总时间 100% = used / total 100%
    us: User time       -> %us = (User + Nice) / totalCpuTime * 100%
    sy: System time     -> %sy = (System + Hard Irq + SoftIRQ) / totalCpuTime
    ni: Nick time       -> %ni = (Nice) / totalCpuTime * 100%
    id: Idle time       -> %id = (Idle) / totalCpuTime * 100%
    wa: Waiting time    -> %wa = (Waiting) / totalCputTime * 100%
    hi: Hard Irq time   -> %hi = (Hard Irq) / totalCpuTime * 100%
    si: SoftIrq time    -> %si = (SoftRQ) / totalCpuTime * 100%
    st: Steal time      -> %st = (Steal) / totalCputTime * 100%

    程序实现(C)

    首先定义一个结构体存放获取到的信息:

    struct CPU_INFO
    {
     char name[10];
     unsigned int user;
     unsigned int nice;
     unsigned int system;
     unsigned int idle;
     unsigned int iowait;
     unsigned int irq;
     unsigned int softirq;
     unsigned int stealstolen;
     unsigned int guest;
     unsigned int guest_nice;
    };

    定义两个函数用于获取信息和计算:

    
    void  get_occupy (Cpu_info *o)
    {
     FILE *fd;
     char buff[MAXBUFSIZE];
     fd = fopen ("/proc/stat", "r"); //这里只读取stat文件的第一行及cpu总信息,如需获取每核cpu的使用情况,请分析stat文件的接下来几行。
     fgets (buff, sizeof(buff), fd);
     // printf("get thr cpu info: %s", buff);
     sscanf (buff, "%s  %u %u %u %u %u %u %u %u %u %u", o->name, &o->user, &o->nice, &o->system, &o->idle, &o->iowait, &o->irq, &o->softirq, &o->stealstolen, &o->guest, &o->guest_nice);
     // printf("name=%s, user=%d, nice=%d, system=%d, idle=%d, iowait=%d, irq=%d, softirq=%d, stralstolen=%d, guest=%d, guest_nice=%d\n", o->name, o->user, o->nice, o->system, o->idle, o->iowait, o->irq, o->softirq, o->stealstolen, o->guest, o->guest_nice);
     fclose(fd);
    }

float cal_occupy (Cpu_info o, Cpu_info n) { int ototal, ntotal; int oused, nused;

ototal = (o->user + o->nice + o->system + o->idle + o->iowait + o-> irq + o-> softirq + o->stealstolen + o->guest + o->guest_nice);
ntotal = (n->user + n->nice + n->system + n->idle + n->iowait + n-> irq + n-> softirq + n->stealstolen + n->guest + n->guest_nice);

oused = ototal - o->idle;
nused = ntotal - n->idle;

// printf("ototal time: %d\n", ototal);
// printf("ntotal time: %d\n", ntotal);

// printf("oused time: %d\n", oused);
// printf("nused time: %d\n", nused);

return (100.0 * (nused - oused) / (ntotal - ototal));

}

最后主程序调用即可:
```c
Cpu_info ocpu,ncpu;
    printf("Start the new thread to monitor key system values.\n");
    while(1)
    {
        //获取cpu使用率
        get_occupy(&ocpu);
        sleep(1);
        get_occupy(&ncpu);
        printf("CPU Usage(%): %8.4f\n", cal_occupy(&ocpu, &ncpu));
    }

参考文献

Linux 内存参数详细说明

在 Linux 下 free 命令可以看出系统当前内存状况,附上 -k , -m , -g 可以分别输出对应单位的内存状况:

Usage:
 free [options]

Options:
 -b, --bytes         show output in bytes
 -k, --kilo          show output in kilobytes
 -m, --mega          show output in megabytes
 -g, --giga          show output in gigabytes
     --tera          show output in terabytes
     --peta          show output in petabytes

以某台 Linux Ecs 为例,运行 free -m 后的输出如下:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3789         229         621           0        2937        3261
Swap:             0           0           0

这些值都是什么意思呢?

首先看行:
Mem :表示物理内存统计
Swap :表示硬盘上交换分区的使用情况(这里我们不去关心)
注:系统的总物理内存:3789M,但系统当前真正可用的内存并不是第一行 free  标记的 621M,它仅代表未被分配的内存。

接下来看列:
total :总计物理内存的大小。
used :已使用多大。
free :可用有多少。
Shared :多个进程共享的内存总额。
Buffers/cached :磁盘缓存的大小。

这大致就是 Linux 下内存各项参数的含义,还有更复杂的参数,未来遇到新的场景时再做补充。

——————— 补充 ———————

cat /proc/meminfo 
MemTotal:        3880404 kB      //总内存
MemFree:          637548 kB      //空闲内存
MemAvailable:    3340664 kB
Buffers:          178760 kB      //给文件的缓冲大小
Cached:          2535436 kB      //高速缓冲存储器使用的大小
SwapCached:            0 kB      //被高速缓冲存储用的交换空间大小
Active:          1370440 kB      //活跃使用中的高速缓冲存储器页面文件大小
Inactive:        1506936 kB      //不经常使用的高速缓冲存储器页面文件大小
Active(anon):     163452 kB
Inactive(anon):      216 kB
Active(file):    1206988 kB
Inactive(file):  1506720 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB      //交换空间总大小
SwapFree:              0 kB      //空闲交换空间
Dirty:                76 kB      //等待被写回到磁盘的大小
Writeback:             0 kB      //正在被写回的大小
AnonPages:        163320 kB      //未映射的页的大小
Mapped:            65100 kB      //设备和文件映射的大小
Shmem:               492 kB      
Slab:             294180 kB      //内核数据结构缓存的大小,可减少申请和释放内存带来的消耗
SReclaimable:     278620 kB      //可收回slab的大小
SUnreclaim:        15560 kB      //不可收回的slab的大小15560 + 278620 = 294180
KernelStack:        2624 kB
PageTables:         5720 kB       //管理内存分页的索引表的大小
NFS_Unstable:          0 kB       //不稳定页表的大小
Bounce:                0 kB 
WritebackTmp:          0 kB
CommitLimit:     1940200 kB
Committed_AS:     586464 kB
VmallocTotal:   34359738367 kB    //虚拟内存大小
VmallocUsed:       14160 kB       //已经被使用的虚拟内存大小
VmallocChunk:   34359715580 kB
HardwareCorrupted:     0 kB
AnonHugePages:     10240 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0         //大页面的分配
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       98176 kB
DirectMap2M:     4096000 kB
DirectMap1G:     2097152 kB

参考文献

Linux 下 Sysstat 系统监控程序详解

Sysstat 包包含许多商业单位共有的各种实用程序,用于监控系统性能和使用活动:

  • iostat  (1) 报告设备、分区和网络文件系统的CPU统计和硬盘吞吐效率的数据。 # 核心工具
  • mpstat  (1) 报告单个或组合处理器相关的统计数据。
  • pidstat  (1) 报告Linux任务 (进程) 的统计信息: I/O、CPU、内存等。
  • tapestat  (1) 报告连接到系统的磁带驱动器的统计信息。
  • cifsiostat  (1) 报告CIFS统计。
  • sysstat  (5) 只是sysstat配置文件的手动页面,给出了sysstat命令使用的环境变量的含义。

Sysstat 还包含您可以通过 cron 或 systemd 计划收集和记录性能和活动数据的工具:

  • sar  (1) 收集、报告和保存系统活动信息 (CPU、内存、磁盘、中断、网络接口、TTY、内核表等)。 # 数据统计核心工具
  • sadc  (8) 是系统活动数据收集器,用作sar的后端。
  • sa1  (8) 在系统活动每日数据文件中收集并存储二进制数据。它是sadc的前端,设计为从cron或systemd运行。
  • sa2  (8) 撰写每日活动总结报告。它是从cron或systemd运行的sar的前端。
  • sadf  (1) 以多种格式 (CSV、XML、JSON等) 显示由sar收集的数据,并可用于与其他程序的数据交换。该命令还可用于为sar使用SVG (可伸缩矢量图形) 格式收集的各种活动绘制图形。

    1 性能及运行状况监控

    1.1 isstat

    使用方法: `iostat [ options ] [

    [ ] ]`  “`bash $ iostat –help Usage: iostat [ options ] [ [ ] ] Options are: [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ { -f | +f } ] [ -j { ID | LABEL | PATH | UUID | … } ] [ –dec={ 0 | 1 | 2 } ] [ –human ] [ -o JSON ] [ [ -H ] -g ] [ -p [ [,…] | ALL ] ] [ […] | ALL ] “` 参数释义:
    `-c`  : 仅显示cpu的状态
    `-d`  : 仅显示存储设备的状态,不可以和-c一起使用
    `-k`  : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示 -m
    `-t`  : 显示日期
    `-p device | ALL`  : device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息
    `-x`  : 显示扩展状态,显示更多内容
    举例:每一秒钟打印一次CPU状态,打印3次 “`bash $ iostat -c 1 3 Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle 0.40 0.00 0.31 0.00 0.00 99.29

avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.50 0.00 0.00 99.50

avg-cpu: %user %nice %system %iowait %steal %idle 0.50 0.00 0.00 0.00 0.00 99.50

距离:显示详细信息
```bash
iostat -x
Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test)      07/14/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.40    0.00    0.31    0.00    0.00   99.29

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
vda              0.01      0.14     0.00   0.06    1.19    16.99    0.65      5.88     0.21  24.79    7.65     9.02    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.01

说明:
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)/s
rkB/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的单位为毫秒)如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
idle 小于70% IO压力就较大了,一般读取速度有较多的wait.  #CPU空闲等待时间

1.2 mpstat

使用方法:mpstat [ options ] [

[ ] ] “`bash $ mpstat –help Usage: mpstat [ options ] [ [ ] ] Options are: [ -A ] [ -n ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ] [ -N { | ALL } ] [ –dec={ 0 | 1 | 2 } ] [ -o JSON ] [ -P { | ALL } ] “` 举例:查看所有处理器统计数据 “`bash $ mpstat -P ALL 1 3 Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU) 11:35:24 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:35:25 AM all 0.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.00 11:35:25 AM 0 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00 11:35:25 AM 1 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00 11:35:25 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:35:26 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11:35:26 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11:35:26 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11:35:26 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:35:27 AM all 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01 11:35:27 AM 0 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01 11:35:27 AM 1 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01 Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 0.17 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.33 Average: 0 0.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 99.33 Average: 1 0.00 0.00 0.67 0.00 0.00 0.00 0.00 0.00 0.00 99.33 “` 说明: – `%user`     显示在用户级别(application)运行使用 CPU 总时间的百分比。 – `%nice`     显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 – `%system`  在核心级别(kernel)运行所使用 CPU 总时间的百分比。 – `%iowait`  显示用于等待I/O操作占用 CPU 总时间的百分比。 – `%irq`   显示在interval时间段内,硬中断占用的CPU总时间。 – `%soft`   显示在interval时间段内,软中断占用的CPU总时间。 – `%steal`   管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。 – `%idle`     显示 CPU 空闲时间占用CPU总时间的百分比。 – `intr/s`  在internal时间段里,每秒CPU接收的中断的次数。 ### 1.3 pidstat “`bash pidstat -dl Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU) 12:01:54 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 12:01:54 PM 0 1 0.11 0.58 0.05 /usr/lib/systemd/systemd –switched-root –system –deserialize 22 12:01:54 PM 0 48 0.00 0.00 0.00 kworker/u4:1 12:01:54 PM 0 226 0.00 0.00 0.00 kworker/u4:2 12:01:54 PM 0 328 0.00 0.85 0.00 jbd2/vda1-8 12:01:54 PM 0 397 0.00 1.95 0.00 /usr/lib/systemd/systemd-journald 12:01:54 PM 0 416 0.01 0.00 0.00 /usr/lib/systemd/systemd-udevd 12:01:54 PM 0 496 0.00 0.01 0.00 /sbin/auditd 12:01:54 PM 0 594 0.00 0.00 0.00 /usr/lib/systemd/systemd-logind 12:01:54 PM 999 598 0.00 0.00 0.00 /usr/lib/polkit-1/polkitd –no-debug 12:01:54 PM 81 599 0.00 0.00 0.00 /usr/bin/dbus-daemon –system –address=systemd: –nofork –nopidfile –systemd-activation 12:01:54 PM 998 616 0.00 0.00 0.00 /usr/sbin/chronyd 12:01:54 PM 0 659 0.00 0.00 0.00 /usr/sbin/atd -f 12:01:54 PM 0 673 0.00 0.00 0.00 /sbin/agetty –keep-baud 115200,38400,9600 ttyS0 vt220 12:01:54 PM 0 895 0.00 0.00 0.00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P 12:01:54 PM 0 898 0.00 0.04 0.00 /usr/sbin/rsyslogd -n 12:01:54 PM 0 1110 0.01 1.80 0.02 /usr/sbin/sshd -D 12:01:54 PM 0 13001 0.00 0.00 0.00 /usr/local/aegis/AliSecGuard/AliSecGuard 12:01:54 PM 0 13646 0.00 0.01 0.00 /usr/sbin/crond -n 12:01:54 PM 0 17624 0.00 0.02 0.00 /usr/local/aegis/aegis_update/AliYunDunUpdate 12:01:54 PM 0 17651 0.00 0.00 0.00 /usr/local/aegis/aegis_client/aegis_10_83/AliYunDun 12:01:54 PM 0 23766 0.00 0.00 0.00 /usr/sbin/aliyun-service 12:01:54 PM 0 23924 0.00 0.02 0.00 -bash “` ### 1.4 tapestat Tapestat报告提供连接到系统的每个磁带驱动器的统计信息。
使用方法: `tapestat [ options ] [ [ ] ]`  “`bash $ tapestat –help Usage: tapestat [ options ] [ [ ] ] Options are: [ –human ] [ -k | -m ] [ -t ] [ -V ] [ -y ] [ -z ] [root@frytea-dev-test ~]# tapestat -k “` ### 1.5 cifsiostat CIFS报告提供每个装载的CIFS文件系统的统计信息。
使用方法: `cifsiostat [ options ] [ [ ] ]`  “`bash $ cifsiostat –HELO Usage: cifsiostat [ options ] [ [ ] ] Options are: [ –dec={ 0 | 1 | 2 } ] [ –human ] [ -h ] [ -k | -m ] [ -t ] [ -V ] “` ## 2 数据收集及统计 ### 2.1 sar sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行。 “`bash sar –help Usage: sar [ options ] [ [ ] ] Main options and reports (report name between square brackets): -B Paging statistics [A_PAGE] -b I/O and transfer rate statistics [A_IO] -d Block devices statistics [A_DISK] -F [ MOUNT ] Filesystems statistics [A_FS] -H Hugepages utilization statistics [A_HUGE] -I { | SUM | ALL } Interrupts statistics [A_IRQ] -m { [,…] | ALL } Power management statistics [A_PWR_…] Keywords are: CPU CPU instantaneous clock frequency FAN Fans speed FREQ CPU average clock frequency IN Voltage inputs TEMP Devices temperature USB USB devices plugged into the system -n { [,…] | ALL } Network statistics [A_NET_…] Keywords are: DEV Network interfaces EDEV Network interfaces (errors) NFS NFS client NFSD NFS server SOCK Sockets (v4) IP IP traffic (v4) EIP IP traffic (v4) (errors) ICMP ICMP traffic (v4) EICMP ICMP traffic (v4) (errors) TCP TCP traffic (v4) ETCP TCP traffic (v4) (errors) UDP UDP traffic (v4) SOCK6 Sockets (v6) IP6 IP traffic (v6) EIP6 IP traffic (v6) (errors) ICMP6 ICMP traffic (v6) EICMP6 ICMP traffic (v6) (errors) UDP6 UDP traffic (v6) FC Fibre channel HBAs SOFT Software-based network processing -q [ [,…] | PSI | ALL ] System load and pressure-stall statistics Keywords are: LOAD Queue length and load average statistics [A_QUEUE] CPU Pressure-stall CPU statistics [A_PSI_CPU] IO Pressure-stall I/O statistics [A_PSI_IO] MEM Pressure-stall memory statistics [A_PSI_MEM] -r [ ALL ] Memory utilization statistics [A_MEMORY] -S Swap space utilization statistics [A_MEMORY] -u [ ALL ] CPU utilization statistics [A_CPU] -v Kernel tables statistics [A_KTABLES] -W Swapping statistics [A_SWAP] -w Task creation and system switching statistics [A_PCSW] -y TTY devices statistics [A_SERIAL] “` 参数说明:
`-A`  显示所有历史数据,通过读取/var/log/sar目录下的所有文件,并把它们分门别类的显示出来;
`-b`  通过设备的I/O中断读取设置的吞吐率;
`-B`  报告内存或虚拟内存交换统计;
`-c`  报告每秒创建的进程数;
`-d`  报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
`-f`  从一个二进制的数据文件中读取内容,比如 sar -f filename
`-i`  interval 指定数据收集的时间,时间单位是秒;
`-n`  分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
`-o`  把统计信息写入一个文件,比如 -o filename ;
`-P`  报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
`-p`  显示友好设备名字,以方便查看,也可以和-d和-n 参数结合使用,比如 -dp 或-np
`-r`  内存和交换区占用统计;
`-R` 
`-t`  这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
`-u`  报告CPU利用率的参数;
`-v`  报告inode,文件或其它内核表的资源占用信息;
`-w`  报告系统交换活动的信息; 每少交换数据的个数;
`-W`  报告系统交换活动吞吐信息;
`-x`  用于监视进程的,在其后要指定进程的PID值;
`-X`  用于监视进程的,但指定的应该是一个子进程ID
举例:查看网络设备的网络吞吐量 “`bash # sar -n DEV 2 4 Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU) 12:00:50 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 12:00:52 PM eth0 2.50 2.50 0.14 1.28 0.00 0.00 0.00 0.00 12:00:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:00:52 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 12:00:54 PM eth0 1.50 1.00 0.09 0.33 0.00 0.00 0.00 0.00 12:00:54 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:00:54 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 12:00:56 PM eth0 2.00 1.50 0.12 0.36 0.00 0.00 0.00 0.00 12:00:56 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:00:56 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 12:00:58 PM eth0 1.00 1.00 0.07 0.33 0.00 0.00 0.00 0.00 12:00:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: eth0 1.75 1.50 0.11 0.58 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 “` 参数释义:
IFACE:设备名;
rxpck/s:每秒收到的包;
rxbyt/s:每秒收到的所有包的数量 ;
txbyt/s:每秒发送的所有包的数量 ;
txbyt/s:每秒发送的所有包的大小;
rxcmp/s:每秒收到数的据压缩包的数量;
txcmp/s :每秒传输的数据压缩包的数据;
rxmcst/s: 每秒收到的多播的包数量; ### 2.2 sadc `sadc`  位于 `/usr/local/lib64/sa/` 目录中(Centos 7.6),如果你没有设置可执行路径,要用绝对路径来运行。
sdac只是一个搜集写入工具,并不直接回显于屏幕上。sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示。
使用方法: `/usr/local/lib64/sa/sadc [ options ] [ [ ] ] [ ]`  “`bash $ /usr/local/lib64/sa/sadc –help Usage: /usr/local/lib64/sa/sadc [ options ] [ [ ] ] [ ] Options are: [ -C ] [ -D ] [ -F ] [ -f ] [ -L ] [ -V ] [ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ] “` 举例: `/usr/local/lib/sa/sadc -`  (后面的“-”是必须的,少了会出乱码和报错),则会输出数据到 `/var/log/sa/` 目录下的一个文件中。 ### 2.3 sa1 Sa1 命令被设计为由cron命令自动启动。 ### 2.4 sa2 Sa2 命令接受sar命令的大多数标志和参数。
Sa2 命令被设计为由cron命令自动启动。 ### 2.5 sadf sadf 能从二进制文件中提取sar所收集的数据;显示的格式不如sar直观,其主要用于导出为csv、xml等格式的文件,方便导入数据库或excel等程序. ## 参考文献 – [Systat Document](http://sebastien.godard.pagesperso-orange.fr/) – [Linux下sysstat安装使用图文详解](https://www.linuxidc.com/Linux/2019-08/160082.htm)

安装 Linux系统监控工具 systat

Sysstat是一种在Linux系统服务器中常用的软件工具包,可以用来监控服务器的性能。比如可以监控CPU、硬盘、网络等数据,我们可以用来进行分析服务器的性能和资源的使用效率。

在 Linux 公社中已有多篇文章介绍该工具的使用方法:


今天就来介绍一下这款好用的 Linux 系统监控工具如何安装:

方法一:源码安装

sysstat 是一款开源的自由软件,其源代码开源在 GitHub ,您可以首先拉取仓库源码:

git clone https://github.com/sysstat/sysstat.git

之后运行如下命令:

$ ./configure
$ make
$ su
<enter root password>
# make install

安装成功!

方法二:软件包管理器直接安装

Install from RHEL/Fedora/CentOS

$ sudo yum install sysstat

CentOS和Fedora系统使用/etc/cron.d中的cron作业来调用收集器进程,并且默认情况下已启用它。 在最新版本中,使用systemd代替cron。 您可能需要启用并启动sysstat服务:

$ sudo systemctl enable sysstat
$ sudo systemctl start sysstat

Install from Ubuntu

$ sudo apt-get install sysstat

然后启用数据收集:

$ sudo vi /etc/default/sysstat
change ENABLED="false" to ENABLED="true"
save the file

最后,重新启动sysstat服务:

$ sudo service sysstat restart


安装完成后,就可以利用这款强大的工具去监控我们的 Linux 操作系统了:
至于其使用,将会在后面的文章中介绍。

我的博客即将同步至腾讯云 + 社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=21yjpwt8mhhc0