对桌面用户来说,监视系统资源使用是一项重要的工作。通过这项工作,我们可以找到系统瓶颈所在,针对性的进行系统优化,识别内存泄露等。问题是,我们应该用什么软件,以及如果针对我们的需求使用它。
在众多备选的监测工具中,多数人使用“top”(procps 包的一部分)。Top 提供了几乎可以说是所有的我们所需要的系统资源使用监测,就在这一个软件中。本文中的所有信息都是基于运行在 Linux 2.6.x 内核上的版本号为3.2.5的 procps 包。
在这里,我们假定 procps 已经安装并运行在你的 Linux 系统中。这里无需你对 top 的使用经验,但如果你尝试去用一下,将更有利。
下面是一些挑战:
A.交互还是批处理模式?
默认情况下,Top 被调用时使用交互模式。在此模式下,Top 无限期运行,并可以通过按键重新定义 Top 的运行方式。但是,有时你需要对 Top 的输出进行后续处理,但这在此模式下难以实现。解决方法?使用批处理模式。
top -b
你将获得类似下面的输出:
top - 15:22:45 up 4:19, 5 users, load average: 0.00, 0.03, 0.00
Tasks: 60 total, 1 running, 59 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.8% us, 2.9% sy, 0.0% ni, 89.6% id, 3.3% wa, 0.4% hi, 0.0% si
Mem: 515896k total, 495572k used, 20324k free, 13936k buffers
Swap: 909676k total, 4k used, 909672k free, 377608k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 16 0 1544 476 404 S 0.0 0.1 0:01.35 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
3 root 10 -5 0 0 0 S 0.0 0.0 0:00.11 events/0
等等,它是不断重复运行的,同交互模式一样。不用担心,你可以使用 -n 限制重复数量。所以,如果你希望获得一次性结果,键入:
top -b -n 1
这一模式的真正优势在于你可以很容易的与 at 或 cron 命令结合。它们的结合,使得 Top 可以在特定时间对资源使用状态进行快照。例如,使用 at ,我们可以设定 top 在一分钟之后运行。
cat ./test.at
TERM=linux top -b -n 1 >/tmp/top-report.txt
at -f ./test.at now+1minutes
细心的读者可能会问“在创建新任务时,为什么我需要在调用 Top 之前设置环境变量 TERM?”。答案是,Top 运行时需要此变量,但“at”在定时调用时并不会保留它。同上面那样简单的设置可以确保 Top 正常运行。
B.如何监控制定进程?
有时,我们只对几个进程感兴趣,可能只是全部进程中的4个或5个。例如,如果你想要监测进程标识(PID)为4360和4358的进程,你需要键入:
top -p 4360,4358
或
top -p 4360 -p 4358
看起来很简单,只需要使用 -p 列出所有需要的 PID,并使用逗号间隔或简单的多次使用 -p即可。
另一种可能是监测拥有特定用户标识(UID)的进程。应对此需求,你可以使用 -u 或 -U 选项。假设用户“johndoe”的 UID 为500,键入:
top -u johndoe
或
top -u 500
或
top -U johndoe
结论是,你既可以纯使用用户名,也可使用数字 UID。“-u,-U?这两者不同?”是的。同多数其它 GNU 工具一样,选项是大小写敏感的。-U 意味着 Top 将会搜索有效的、真实的、被保存的以及文件系统的 UID 进行匹配,而 -u 仅匹配有效的用户id。要知道,每一个 *nix 进程在运行时都是用有效用户标识(effective UID),而其中有些并不等同真实用户标识。多数情况是,对类似文件系统权限或操作系统功能这项的有效用户标识感兴趣的人将会检查它,而不是 UID。 不同于 -p 仅用于命令行选项,-U 和 -u 都可以在交互模式中使用。同你猜测的一样,键入‘U’或‘u’可以依据用户名过滤进程。同样的规则依然适用,‘u’为有效用户标识,‘U’为 真实/有效/保存/文件系统用户名。你将被要求键入用户名或数字 UID。
C.快速还是缓慢更新?
在回答这个问题之前,让我们先简单介绍一下,Top 是如何运行的。这里,Strace 能够帮助你:
strace -o /tmp/trace.txt top -b -n 1
使用你偏爱的文本编辑器打开 /tmp/trace.txt。你怎么想?一次调用有太多的活要做了,反正我是这么想的。Top 在每次遍历中必做的工作之一就是打开很多文件,并解析其内容,可以看看次数:
grep open( /tmp/hasil.txt | wc -l
举例而言,我的 Linux 中,这个数量是304.仔细观察就会发现,Top 遍历 /proc 文件夹,以收集进程信息。/proc 本身是一个虚拟文件系统,意味着它并非存在于真实硬盘之中,而是由 Linux 内核凭空创建,保存在内存中的。在文件夹中,如/proc/2097(2097为 PID),Linux 内核将与之关联的信息打印到此文件中,而这里就是 Top 的消息来源。同时试一下:
time top -b -n 1
这样你就能了解到 Top 单轮工作有多快了。在我的系统中,大约为0.5-0.6秒。看“real”字段,不是“user”或“system”字段,因为“real”字段反应了 Top 工作需要的总时间。
所以,有了这个认知之后,使用适度的更新间隔是明智的。基于文件系统访问内存也是需要时间的。经验法则是,对于多数用户来说,1到3秒的间隔就足够了。在命令行中使用-d,或在交互模式下按下“s”以设置。你可以使用类似2.5,4.1这样的小树。
什么时候我们需要快于1秒的更新?
- 时间段内需要更多的样本。应对这点要求,最好使用批处理模式,并将标准输出重定向到文件中,以便更好的分析。
- 你并不在意 Top 消耗的额外CPU负荷。是的,虽然它很小,它依然需要负荷。如果你的 Linux 系统相对比较空闲,随意使用短间隔,如果不是,最好为重要的任务保留你的 CPU 时间。
一个减少 Top 工作的办法是只监测特定的几个 PID。这样,Top 无需遍历 /proc 下所有的子文件夹。用户名过滤呢?并不会变得更好。用户名过滤会给Top带来额外工作量,因此将其与短间隔联合将会增加 CPU 负荷。
当然,当你需要强制更新时,按下 Space 键,Top 将会刷新统计。
D.我们需要的字段
默认时,Top 启动后会显示下面的任务属性:
字段 描述
PID : 进程 ID
USER : 有效用户 ID
PR : 动态优先值
NI : 良好值,也被称为基本优先级
VIRT : 任务虚拟大小。包括进程的可执行二进制文件大小,数据区大小以及所有已加载的共享库的大小。
RES : 目前任务内存消耗。存入交换分区的部分并不包含。
SHR : 一些内存区域可能由两个或多个任务分享,此字段反应这些共享区域。例如共享库以及 Sysv 共享内存。
S : 任务状态
%CPU : Top 屏幕更新时专用于运行任务的CPU 时间百分比。
%MEM : 任务当前内存消耗的百分比
TIME+ : 在任务启动后消耗的总CPU时间。"+" sign means it is displayed with hundreth of a second granularity. 默认时,TIME/TIME+ 不会计入已经关闭的任务子进程。
COMMAND : 显示程序名。
列 | 描述 |
---|---|
nFLT ('u'键) | 进程启动以来重大页面错误(page fault)的个数。准确地说,页面错误是由于进程访问它的地址空间内不存在的页面引起的。“重大”的页面错误是指内核需要访问磁盘来使得该页面有效。相反,小型页面错误是指内核只需要在内存中分配页面而不用读磁盘。 例如,假设程序ABC的大小为8KB,页面大小为4KB。当程序读进内存的时候,发生了两次重大的页面错误(2*4KB)。程序本身分配了8KB空间当作临时数据。因此,还会有两次小型页面错误。 nFLT过高可能意味着:
当进程第一次运行时,看到大量重大页面错误很正常。下次运行的时候,由于缓存已经分配好了,你很可能看到"0"次或者很小的 nFLT。但是,如果一个程序频繁地触发重大页面错误,很有可能是你目前安装的内存不够那个程序使用。 |
nDRT ('v'键) | 上次页面写入磁盘以来,脏页面的数目。 什么是脏页面?先看一点背景知识。大家都知道,Linux使用了缓存系统,所以从磁盘读取的数据也会被缓存到内存中。这样做的优点是,后续的对这个磁盘块的读操作可以直接从内存中取数据,因而速度更快。 但这也是有代价的。如果缓冲区的内容被修改了,那么就需要进行同步。因此,被更改的缓冲区(脏页面)必需写回到磁盘中。同步失败则可能导致磁盘上的数据不一致。 在负载不重的系统中,nDRT 通常小于10(大约估计)或者为0。如果你的系统通常大于10,则有可能:
现在的话,(1) 不太可能出现,因为I/O速度越来越快,需要更少的CPU(DMA技术的出现)。所以 (2) 出现的概率更高。 注意:在 2.6.x 内核中, 不知道为什么,这个列的值总是0。 |
P ('j'键) | 上次使用的CPU。这个列只在SMP环境中有意义。这里的SMP指超线程,多核或者多CPU架构。如果你只有一个CPU(不是多核,没有超线程),这个列总是显示0。 在SMP系统中,即使这个列有几次改变,也不要吃惊。这意味着,Linux 内核尝试将你的进程移到另一个负载更少的CPU。 |
CODE ('r'键) 和 DATA ('s'键) | CODE 只是反映了你程序代码的大小,DATA反映了你数据段(栈,堆,变量,不包含共享库) 的大小。单位都是KB。 DATA可以显示你的程序分配了多少内存。有时,也可以用来协助分析内存泄漏。当然,你需要更好的工具,如使用 valgrind 来查看每次的内存分配。如果DATA不断增长,则很有可能出现了内存泄漏。 注意:DATA, CODE, SHR, SWAP, VIRT, RES 都是使用页面大小(Intel架构上为4KB)来衡量。只读数据段也包含在CODE的大小中,因而有时候CODE比实现的段要大。 |
SWAP ('p'键) | 已经进行交换的进程内存映像大小。这个列有时很让人疑惑: 逻辑上,你可能期望这个列显示你的程序实际上是完全进行交换,还是部分交换了,交换了多少。但是事实上不是。即使"Swap used" 列显示为0,你仍然可以很吃惊地发现所有进程的SWAP列都大于0。到底是为什么呢? 这是由于 top 命令使用如下的计算公式: 前面说过,VIRT 包含了进程的地址空间里面的所有东西:内存中的,已经进行交换的,尚未从磁盘读取的。RES 代表了进程占用的全部内存大小。所以,这里的SWAP代表了已经进行交换的全部数据,以及尚未从磁盘读取的数据。不要被SWAP这个名字迷惑了,它代表的不只是已经交换的数据。 |
要显示以上的列,在交互模式下按 'f' 键,然后再按相应的键。按一下显示指定的列,再按一下隐藏该列。要确定当前显示的是哪些列,只需看第一行的字母(在"Current Fields"的右边)。大写字母表示显示了该列,小写表示隐藏。你选好以后,按回车即可。
排序使用了类似的方法。按 'O' (大写),然后再按相应的键。即使记不住那些按键也没关系,top 会显示出来。新的排序键将标上星号,相应的字母会变成大写,很直观。选好以后,记得按回车。
E.多视图比单个视图更好吗?
在不同的情况下,有时候我们想监视不同的系统属性。例如,你想同时监控CPU的百分比和CPU被所有任务消耗的时间。在另一段时间,你想监控常驻内存和所有任务的总页面故障。快速按‘F’键然后切换界面?我想这也太不明智了吧。
为什么不试试多视图窗口模式呢?按‘A’(大写)切换到多窗口界面。默认的,你将会看到4个不同的系列的字段组。每个字段组有默认的标签/名称:
第一字段组: Def
第二字段组: Job
第三字段组: Mem
第四字段组: Usr
第一字段组就是你在单一视图窗口所常见的组,而其余的组会被隐藏。内置多视图窗口模式,所有可用的窗口通过按‘a’或者‘w’循环。注意,切换到其他窗口时会改变活动窗口(也称为当前窗口)。假如你不确定哪一个是活动窗口的话,只需要看一下top展示的第一行(在当前时间字段的左边)。另一个改变活动窗口的方法是通过按‘G’紧跟着输入数字(1到4)。
活动窗口是针对用户输入的,因此在开始干活之前确定选好了你偏好的界面。然后,你可以在单一窗口模式下爱干嘛干嘛。在这种情况你一般想自定义字段展示,那么你只需要按‘f’然后开始自定义。
假如你认为第四字段组太多的话,你只需要切换到字段组然后按‘-’隐藏。请注意,即使你隐藏了当前的字段组,那并不以意味着你同时改变了活动组。再次按‘-’的话,当前组就可见了。
如果你想操作多视图窗口模式,再次按‘A’键。那样也将使得活动组成为了单一视图窗口模式的新的字段组。
F. "我的Linux主机上怎么会只有很少的空闲内存?"
有同样的问题? 不管你在主板上增加多少内存,你都会很快发现空闲内存减少的非常迅速. 空闲内存算错了? 不!
在回答这个之前, 先查看一下top命令顶部显示的内存概要 (有可能你需要按 'm'来显示出来). 在这里,你可以看到两个区域: 缓冲(buffers)和缓存(cached)。 "缓冲(Buffers)" 代表有多少内存用来缓存磁盘块 "缓存(Cached)" 有一点类似 "缓冲(Buffers)", 只是仅仅从文件读取缓存页面. 想透彻了解这部分,建议读一下Linux内核的书比如Robert M.Love写的《Linux Kernel Development》。
这足够了解缓冲(buffers)和缓存(cached)代表系统缓存. 他们会根据linux内核机制动态增加或减少。
除去被缓存的消耗,程序和代码同样要占据RAM. 所以,最终空闲内存显示的是RAM中不被缓存和程序/代码占用的部分 一般来说,你也可以考虑缓存区域为另一部分“空闲”RAM,如果程序需要更多内存它会减少
从进程的角度来看,你可能想知道哪个区域代表真实的内存消耗,VIRT(virtual memory usage )区域? 当然不是! 回顾一下,这个区域代表了进程地址空间里一切,包括相关的库。阅读top命令的源代码和proc.txt (在内核代码树中的Documentation/filesystem 文件夹内), 我的结论是RSS字段是进程内存消耗的最好的描述.我说“最好的”是因为你可以考虑它是近似而不是所有时间100%准确。
G.使用数个保存的配置
希望保存多个不同的配置文件,以便于轻松的切换预配置视图?只需要创建一个 Top 二进制文件的软连接到你喜欢的名字:
ln -s /usr/bin/top /usr/bin/top-a
然后运行新的“top-a”。调整完毕后键入‘W’保存配置,它将被保存到 ~/.top-arc(格式为你的 Top 别名+rc)。
这样,运行原来的 Top 可以使用之前的视图,而 top-a 则使用第二个,依次类推。
H.总结
有很多窍门使用top会更加高效。关键是知道你真正需要的是什么和可能的对Linux低级别原理的一般理解。统计并不总是正确,但至少有助于总体衡量。所有这些数字收集自 /proc,因此首先确保它已挂载!
从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示…… 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。
1. boot的含义
先问一个问题,“启动”用英语怎么说?
回答是boot。可是,boot原来的意思是靴子,“启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:
“pull oneself up by one’s bootstraps”
字面意思是“拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!
早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做“拉鞋带”,久而久之就简称为boot了。
计算机的整个启动过程分成四个阶段。
2. 第一阶段:BIOS
上个世纪70年代初,“只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。
这块芯片里的程序叫做“基本输入输出系统”(Basic Input/Output System),简称为BIOS。
2.1 硬件自检
BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做“硬件自检”(Power-On Self-Test),缩写为POST。
如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。
2.2 启动顺序
硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。
这时,BIOS需要知道,“下一阶段的启动程序”具体存放在哪一个设备。也就是说,BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做“启动顺序”(Boot Sequence)。
打开BIOS的操作界面,里面有一项就是“设定启动顺序”。
3. 第二阶段:主引导记录
BIOS按照“启动顺序”,把控制权转交给排在第一位的储存设备。
这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给“启动顺序”中的下一个设备。
这最前面的512个字节,就叫做“主引导记录”(Master boot record,缩写为MBR)。
3.1 主引导记录的结构
“主引导记录”只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。
主引导记录由三个部分组成:
- 第1-446字节:调用操作系统的机器码。
- 第447-510字节:分区表(Partition table)。
- 第511-512字节:主引导记录签名(0x55和0xAA)。
其中,第二部分“分区表”的作用,是将硬盘分成若干个区。
3.2 分区表
硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,“主引导记录”因此必须知道将控制权转交给哪个区。
分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做“主分区”。
每个主分区的16个字节,由6个部分组成:
- 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
- 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
- 第5个字节:主分区类型。
- 第6-8个字节:主分区最后一个扇区的物理位置。
- 第9-12字节:该主分区第一个扇区的逻辑地址。
- 第13-16字节:主分区的扇区总数。
最后的四个字节(“主分区的扇区总数”),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。
如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数。
4. 第三阶段:硬盘启动
这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。
4.1 情况A:卷引导记录
上一节提到,四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做“卷引导记录”(Volume boot record,缩写为VBR)。
“卷引导记录”的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。
4.2 情况B:扩展分区和逻辑分区
随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成“扩展分区”(Extended partition)。
所谓“扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做“逻辑分区”(logical partition)。
计算机先读取扩展分区的第一个扇区,叫做“扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。
计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。
但是,似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。
4.3 情况C:启动管理器
在这种情况下,计算机读取“主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的“启动管理器”(boot loader),由用户选择启动哪一个操作系统。
Linux环境中,目前最流行的启动管理器是Grub。
5. 第四阶段:操作系统
控制权转交给操作系统后,操作系统的内核首先被载入内存。
以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。
然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。
至此,全部启动过程完成。
备份
备份软件
- Amanda -客户端-服务器模型备份工具
- Bacula – 另一个客户端-服务器模型备份工具
- Backupninja -轻量级,可扩展的元数据备份系统
- Backuppc -客户端-服务器模型备份工具和文件共享方案。
- Burp -网络备份和还原程序
- Duplicity -使用rsync算法加密的带宽-效率备份
- Lsyncd -监控一个本地目录树的变化,然后产生一个进程去同步变化。默认使用rsync。
- Rsnapshot -文件系统快照工具
- SafeKeep -使用rdiff-backup,集中的,基于pull的备份
- TarSnap – 具有一个开源客户端的安全备份服务
- UrBackup -另一个客户端-服务器备份系统
- DREBS – AWS EBS支持策略的备份脚本
克隆
克隆软件
- Clonezilla -分区和磁盘镜像/克隆程序
- Fog – 另一个计算机克隆解决方案
- Redo Backup -简单的备份,恢复和还原
云计算
- AppScale – 兼容Google App引擎的开源云计算软件.
- Archipel -使用Libvirt管理和监视虚拟机
- CloudStack -创建,管理和部署基础云服务的云计算软件
- Cobbler -Cobbler是一个Linux安装服务器,允许快速地构建网络安装环境
- Eucalyptus -兼容AWS的开源私有云软件
- Mesos -开发和运行能效高的分布式系统。
- OpenNebula -一个用于系统管理员和研发运维的用户驱动的云管理平台
- OpenStack -构建私有和开放云的开源软件
- The Foreman -Foreman是一个用于物理和虚拟服务器的全生命周期管理工具.FOSS.
云业务流程
- BOSH -IaaS业务流程平台,最初用于部署和管理云计算平台PaaS,但也用于通用的分布式系统。
- Cloudify -使用Python和YAML编写的开源TOSCA-based云业务流程软件平台。
- Juju -云业务流程工具用于管理服务,比如charms,YAML配置和部署脚本集
- MCollective -来自Puppet实验室的管理服务器业务流程和开发的Ruby框架
- Overcast -在不同的云提供商上部署VMs,并在任何或所有(VM)上通过SSH并行运行命令行和脚本
- Rundeck – 简单的业务流程工具
- Salt -Python编写
云存储
- git-annex assistant -在你的每一个OSX和Linux电脑,Android设备,可移动驱动,NAS电器和云服务上一个同步文件夹
- ownCloud -提供你的文件的统一访问,通过web,你的电脑和你的移动设备
- Seafile -另一个开源的云存储解决方案
- SparkleShare -提供云存储和文件同步服务。它默认使用Git作为存储后端
- Swift -一个高可用,分布式,最终一致的对象/大数据存储
- Syncthing -一个用于私有,加密和身份认证数据的开源系统
代码审查
基于Web的协作式代码审查系统
- Gerrit -基于Git版本控制,它促进软件开发人员审查源代码修改和批准或拒绝这些变更。
- Review Board – 基于MIT License的可用自由软件
协作软件
协作软件和群件套件
- Citadel/UX -协同套件(消息和群件)继承于Citadel家族程序
- EGroupware -PHP编写的群件软件
- Horde Groupware -基于PHP的协作软件套件,包括邮件,日历,wiki,时间跟踪和文件管理
- Kolab – 另一个群件套件
- SOGo – 协作软件服务器,专注简单性和可伸缩性
- Zimbra -协作软件套件,包括邮件服务和web客户端
配置管理数据库
配置管理数据库(CMDB)软件
- i-doit – 开源的IT文档管理和CMDB
- iTop -一个完全开源的,ITIL,基于web的服务管理工具
- Ralph -用于大型数据中心或较小本地网络的资产管理,DICM和CMDB系统
- Clusto -帮助跟踪你的库存,在哪,如何连接,同时提供一个和基础架构元素交互的抽象接口
配置管理
配置管理工具
- Ansible -Python编写的,通过SSH管理节点
- CFEngine -轻量级代理系统。通过申明语言配置状态。
- Chef -Rbuy和Erlang编写,使用纯RubyDSL
- Fabric – Python库和cli工具,为应用程序部署或系统管理任务简化使用SSH。
- Pallet -通过Clojure DSL进行架构定义,配置和管理
- Puppet – Ruby编写,使用Puppet声明语言或Rbuy DSL
- Salt – Python编写
- Slaughter – Perl编写
持续继承和持续部署
持续集成/部署软件
- Buildbot – 基于Python的持续集成工具
- Drone – 构建在Docker,使用YAML文件配置的的持续集成服务器
- GitLab CI -基于rbuy。他们也提供GitLab用于管理git存储库
- Go – 开源的持续交付服务器
- Jenkins – 一个可扩展的开源持续集成服务器
- Vlad the Deployer -自动化部署
分布式文件系统
网络分布式文件系统
- OpenAFS -只读副本和多操作系统支持的分布式网络文件系统
DNS
DNS服务器
- Bind -最广泛使用的域名服务软件
- djbdns -DNS应用集合,包括tinydns
- Designate – DNS REST API,支持多种DNS服务器的后端
- dnsmasq -为小规模网络提供DNS,DHCP和TFTP服务的轻量级服务
- Knot – 高性能,权威的DNS服务器
- NSD – 权威的、高性能的、简单的域名服务器。
- PowerDNS -具有各种数据存储后端和负载平衡功能的DNS服务器。
- Unbound – 验证、递归和缓存DNS解析器。
- Yadifa – 具有DNSSEC兼容的轻量级的权威域名服务器,支持.eu的顶级域名。
主机控制面板
Web主机控制面板
- Ajenti -Linux和BSD控制面板
- Feathur – VPS供应和管理软件
- ISPConfig -Linux主机控制面板
- VestaCP -用于Linux和Nginx的主机面板
- Virtualmin -基于webmin的Linux控制面板
- ZPanel -Linux BSD和Windows控制面板
IMAP/POP3
IMAP/POP3邮件服务器
- Courier IMAP/POP3 -快速,可伸缩,企业级IMAP和POP3服务器
- Cyrus IMAP/POP3 -运行在密封服务器上,普通用户不允许登录。
- Dovecot -主要考虑安全而编写的IMAP和POP3服务器
- Qpopper – 一个古老且流行的POP3服务器实现
IT资产管理
IT资产管理软件
- GLPI -带有额外管理接口的信息资源管理器
- OCS Inventory NG -允许用户清算IT资产
- RackTables -数据中心和服务器房间资产,比如将硬件资产,网络地址,在货架空间,网络配置文档化。
- Ralph – 针对大型数据中心系统以及小型局域网网络的资产管理、DCIM和CMDB。
- Snipe IT -资产和许可证管理软件
LDAP
LDAP服务器
- 389 Directory Server – 通过Red Hat部署
- Apache Directory Server -用Java编写的Apache软件基金会项目
- Fusion Directory -基于OpenLDAP改善服务和公司目录的管理
- OpenDJ – OpenDS分支
- OpenDS -另一个用Java编写的目录服务器
- OpenLDAP -由OpenLDAP项目开发
日志管理
日志管理工具:收集,解析,可视化
- Elasticsearch – 一个基于Lucene的文档存储,主要用于日志索引、存储和分析。
- Fluentd – 日志收集和发出
- Flume -分布式日志收集和聚合系统
- Graylog2 -具有报警选项的可插入日志和事件分析服务器
- Heka -流处理系统,可用于日志聚合
- Kibana – 可视化日志和时间戳数据
- Logstash -管理事件和日志的工具
- Octopussy -日志管理解决方案(可视化/报警/报告)
监控
监控软件
- Cacti -基于Web的网络监控和图形工具
- Cabot – 监控和报警,类似PagerDuty
- check_mk -Nagios的扩展集合
- Dash -一个用于GNU/Linux机器的低开销web仪表板监控。
- Icinga – Nagios分支
- LibreNMS – Observium分支
- Monit – 管理和监控Unix系统的小型开源工具
- Munin -网络资源监控工具
- Naemon -基于Nagios4内核的网络监控工具,具有性能加强和新功能
- Nagios -计算机系统,网络和基础架构监控软件
- Observium -服务器和网络设备的SNMP监控,运行在linux
- OMD -开放的监控分布
- Opsview -基于Nagios4,Opsview核心,用于小型IT和测试环境
- Riemann -灵活和快速的事件处理器,允许负责时间和度量分析
- Sensu -开源的监控框架
- Sentry – 应用监控,事件记录和聚合
- Shinken – 另一个监控框架
- Thruk – 多后台监控的web接口,支持Naemon,Nagios,Icinga和Shinken
- Xymon -灵感来自Big Brother的网络监控
- Zabbix – Enterprise-class software for monitoring of networks and applications.
- Zabbix – 监控网络和应用的企业级软件
- Zenoss -基于Zope的应用,服务器和网络管理平台
度量和度量收集
度量收集和显示软件
- Collectd -系统统计收集守护进程
- Collectl -高精度系统性能指标收集工具。
- Dashing -Ruby gem,允许快速统计仪表板的开发。基于HTML5,允许在数据中心或会议室进行大屏幕显示。
- Diamond -基于Python的统计收集守护进程
- Ganglia – 基于RRD用于网格和/或集群的服务器的高性能、可伸缩监控设备。兼容Graphite,使用一个单一的收集进程。
- Grafana -一个Graphite或InfluxDB仪表盘和图形编辑器
- 开源的可伸缩绘图服务器
- InfluxDB -开源的分布式时间序列数据库,没有外部依赖。
- KairosDB -快速分布式可扩展的时间序列数据库,OpenTSDB 1. x的分支。
- OpenTSDB -存储和服务大量的时间序列数据,不丢失粒度。
- RRDtool – 开源企业标准,用于时间序列数据的高性能数据记录和绘图系统
- Statsd -应用统计监听
网络配置管理
网络配置管理工具
时事通讯
时事通讯软件
NOSQL
NOSQL数据库
- 列族
- Apache HBase – Hadoop数据库,一个分布式的大数据存储
- Cassandra -分布式数据库管理系统,设计用于处理大量数据跨多个服务器。
- Hypertable -基于c++的bigtable DBMS,节省通信,可独立或在Hadoop类似的分布式FS上运行。
- 文档存储
- CouchDB -易于使用,多主机复制的面向文档的数据库系统。
- ElasticSearch – 基于Java的数据库,受欢迎的日志聚合,和电子邮件归档项目。
- MongoDB – 另一个面向文档的数据库系统
- RavenDB – 具有ACID/事物功能的基于文档的数据库
- RethinkDB -开源分布式文档存储数据库,关注JSON
- 图
- 键值
NoSQL服务器比较: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
打包
- fpm – 万能的多格式包创建器
- omnibus-ruby – 全栈,跨发行版的包管理软件(Ruby)
- packman -全栈,跨发行版的包管理软件(Python)
- tito – 为git项目构建RPM
队列
- BeanstalkD – A simple, fast work queue.
- BeanstalkD – 一个简单快速的工作队列
- Gearman -快速的多语言队列或任务处理平台
- NSQ – 实时分发的消息平台
- RabbitMQ -健壮的,全功能,跨发行版的队列系统
- ZeroMQ -轻量级队列系统
RDBMS
关系数据库管理系统
- Firebird – 真正的全球开源数据库
- Galera -Galera MySQL集群是一个易于使用的高可用性解决方案,具有很高的系统正常运行时间,没有数据丢失,为未来的增长提供可伸缩性。
- MariaDB -MySQL的社区开发分支
- MySQL – 非常流行的RDBMS服务器
- Percona Server -增强的,可替换MySQL
- PostgreSQL – 对象关系数据库管理系统(ORDBMS)
- PostgreSQL-XL – 基于PostgreSQL的可伸缩开源数据库集群
- SQLite -自包容,弱服务器,零配置,支持事务的SQL DBS实现库
安全
安全工具
- Denyhosts -阻止SSH字典攻击和暴力攻击
- Fail2Ban – 扫描日志文件,并对具有恶意行为显示的IP采取措施
- SpamAssassin -一个强大的和受欢迎的垃圾邮件过滤器,它采用多种检测技术。
服务发现
- Consul – Consule是伊戈尔服务发现,监控和配置的工具
- Doozerd – Doozer是一个高可用,完全一致的存储,用于少量非常重要的数据
- ZooKeeper – ZooKeeper是一个集中的服务,用于维护配置信息,命名,提供分布式同步和组服务
SMTP
SMTP服务器
- Exim -由剑桥大学开发的消息传输代理(MTA)
- Haraka – 用JavaScirpt编写的高性能,可插入的SMTP服务器
- MailCatcher -Ruby gem部署一个简单的SMTP MTA网关,接收所有邮件并在web接口显示。对调试和开发有用。
- Maildrop -开源的一次性邮件服务器,对开发也很有用
- OpenSMTPD -从OpenBSD项目实现的安全的SMTP服务器
- Postfix – 快速,易于管理和安全的Sendmail替代品
- Qmail – 安全的Sendmail替代品
- Sendmail -消息传输代理(MTA)
软件容器
操作系统级别的虚拟化
- Bitnami -为web应用,开发栈和虚拟设备生产开源软件安装器或软件包
- Docker – 给开发者和系统管理员构建,发布和运行分布式应用程序的开放平台
- OpenVZ -Linux平台基于容器的虚拟化
SSH
SSH工具
- autossh -网络中断后自动复位ssh会话。
- Cluster SSH -通过一个图形化控制台控制多个xterm窗口。
- DSH -Dancer的shell/分布式shell-从一个命令行包装执行多个远程shell命令。
- Mosh – 移动shell
- parallel-ssh -提供并行的OpenSSH版本和相关工具
- SSH Power Tool -不使用pre-shared钥匙的情况下对多个服务器同时执行命令和上传文件
统计
分析软件
- Analog – 世界上最流行的日志分析工具
- GoAccess -在终端运行的开源的实时web日志分析和交互视图
- Piwik -免费和开源的web分析应用
- Webalizer – F快速免费的web服务器日志文件分析程序
工单系统
基于web的工单系统
- Bugzilla -由Mozilla项目开发和使用过的通用缺陷跟踪和测试工具
- Cerb – 基于商业开源许可的基于组的邮件管理项目
- Flyspray – 使用PHP编写的缺陷跟踪系统
- MantisBT -另一个基于web的缺陷跟踪系统
- osTicket -开源的技术支持工单系统
- Otrs -免费和开源故障通知单系统软件包,公司,组织,或其他实体可以使用它来基于询问分配工单并跟踪进一步的沟通。
- Request Tracker -使用Perl编写的工单跟踪系统
- TheBugGenie -开源的工单系统,具有非常完备的用户权限分配
故障排除
故障排除工具
- mitmproxy -ython工具,用于拦截,查看和修改网络流量。在排除某些问题是非常重要的。
- Sysdig -从一个运行的linux实例上捕获系统状态和活动,之后保存,过滤和分析
- Wireshark -世界上著名的网络协议分析工具
项目管理
基于web的项目管理和缺陷跟踪系统
- ChiliProject – Redmine分支
- GitBucket 用Scala编写的GitHub的克隆,单独jar安装
- GitLab -用Rbuy编写的GitHub的克隆
- Gogs -用Go编写
- OpenProject -开源的项目协作项目
- Phabricator PHP编写
- Redmine – 基于rails在rbuy编写
- The Bug Genie -PHP编写
- Trac -python编写
版本控制
软件版本和版本控制
- Fossil -分布式版本控制,内建wiki和缺陷跟踪
- Git -速度很快的分布式版本控制和源代码管理
- GNU Bazaar -由Cannoicalzi赞助的分布式版本控制系统
- Mercurial -另一个版本控制
- Subversion -客户端-服务器版本控制系统
虚拟化
虚拟化软件
- Ganeti -在KVM和Xen上构建的集群虚拟服务器管理软件
- KVM -Linux内核虚拟化架构
- oVirt -管理虚拟机,存储和虚拟网络
- Packer – 从单个源配置为多个平台创建相同的机器镜像
- Vagrant – 创建完整开发环境的工具
- VirtualBox -来自Oracle公司的虚拟化产品
- Xen -用于32/64位Intel/AMD(IA 64)和PowerPC 970架构的虚拟机监控器
VPN
VPN软件
- OpenVPN -使用一个定制的安全密钥交换协议,利用SSL / TLS。
- Pritunl -基于OpenVPN的方案,易于设置
- SoftEther – 具有高级特性的多协议VPN软件
- sshuttle -穷人的VPN
- strongSwan – Linux下完整的IPsec实现
- tinc -分布式点对点VPN
XMPP
XMPP服务器
- ejabberd -用Erlang/OTP编写的XMPP短信服务器
- Metronome IM -Prosody IM分支
- MongooseIM -ejabberd分支
- Openfire -实时协作(RTC)服务器
- Prosody IM -Lua编写的XMPP服务器
- Tigase -java实现的XMPP服务器
Webmails
Webmail应用
- Mailpile – A modern, fast web-mail client with user-friendly encryption and privacy features.
- Mailpile – 一个先进,快速的web-mail客户端,具有用户友好的加密的私有个性
- Roundcube – Browser-based IMAP client with an application-like user interface.
- Roundcube – 基于浏览器的IMAP客户端,具有应用类似的用户界面
Web
Web服务器
- Apache -最流行的web服务器
- Cherokee -轻量级,高性能的web服务器/反向代理
- Lighttpd – speed-critical环境下更优化的web服务器
- Nginx -反向代理,负载均衡器,HTTP缓存和web服务器
- uWSGI -uWSGI项目,目标在开发一个构建主机服务的全栈
Web性能
Wikis
Wiki软件
- DokuWiki -使用简单和高度通用的wiki,这并不需要一个数据库。
- Gollum – 一个简单,Git-powered wiki,具有不错的API和本地前端。
- ikiwiki -一个wiki编译器
- Mediawiki -加强Wikipedia
- MoinMoin -一个高级的易用的扩展性强的Wiki引擎,具有大量的社区用户TiddlyWiki – JavaScript的完整交互wiki
- Ōlelo Wiki – 在Git存储上保存页面的wiki
资源
各种资源,比如书籍,网站和文章,用于提升技能和知识
博客
- Code as Craft – Etsy的运维博客,大量的技术博客
- DevOpsGuys – Devops顾问,运维博客
- Rackspace Developers -具有大量Devops主题的博客
书籍
Sysadmin相关书籍
- The Linux Command Line – William Shotts的书,关于Linux命令行
- The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win -DevOps技术如何修复发生在IT组织的问题
- The Practice of System and Network Administration – 第一和第二版本描述系统和网络管理的最佳实践,独立于特定平台或技术。
- The Visible Ops Handbook: Implementing ITIL in 4 Practical and Auditable Steps -一个方法论,旨在启动实施控制和过程改进。
- UNIX and Linux System Administration Handbook – 从使用的角度走进系统管理
编辑器
开源的代码编辑器
- Atom -来自Github的文本编辑器
- Brackets – 用于web设计和前端开发的开源代码编辑器
- Eclipse – 用Java编写的IDE,具有可扩展的插件系统
- Geany -GTK2文本编辑器
- GNU Emacs -一个可扩展,自定义的文本编辑器
- Haroopad -Markdown编辑器,具有实时预览
- ICEcoder -非常棒的代码编辑器,内建常见的web语言
- jotgit -Git支持的实时协作代码编辑
- Light Table – 下一代代码编辑器
- Lime -旨在提供一个Sublime Text的开源替代方案
- TextMate -OS X下的图形文本编辑器
- Vim -一个高可配置的文本编辑器,用于高效编辑
时事通讯
- Servers for Hackers – 程序员的时事通讯,发现他们需要知道的服务器相关内容。
存储
软件包存储
网站
有用的系统管理员相关的网站
- Ops School – 全面的计划,将帮助你成为一名运维工程师。
- Digital Ocean Tutorials – 一个非常庞大资源,获得基本的应用程序,工具,甚至是系统管理主题。