Paul Jiang's Blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

MapReduce

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

1 问题的出现

多年来磁盘存储容量快速增加的同时,其访问速度-磁盘数据读取速度-却未能与时俱进。

读取一个磁盘中所有的数据需要很长的时间,写甚至更慢。一个很简单的减少读取时间的办法是同时从多个磁盘上读取数据。试想,如果我们拥有100个磁盘,每个磁盘存储1%的数据,并行读取,那么不到两分钟就可以读取所有数据。

MapReduce提出了一个编程模型,该模型将上述磁盘读写的问题进行抽象,并转换为对一个数据集(由键/值对组成)的计算

2 MapReduce

MapReduce是一种可用于数据处理的编程模型。MapReduce程序本质上是并行运行的,因此可以将大规模的数据分析任务交给任何一个拥有足够多机器的运营商。MapReduce的优势在于处理大规模数据集。

2.1 map阶段和reduce阶段

MapReduce任务过程被分为两个处理阶段:map阶段和reduce阶段。每个阶段都以键/值对作为输入和输出,并由程序员选择它们的类型。程序员还需具体定义两个函数:map函数和reduce函数。

2.2 找出最高气温

目标:根据原始数据找出每年的最高气温。

原始数据:包含了一年中每天的气温记录。

名称 map
输入 原始数据
输出 (1950, 0)
(1950,22)
(1950,-11)
-1,949,111
(1949,78)
功能 从原始数据中提取出有用数据组成键/值对
名称 shuffle
输入 (1950, 0)
(1950, 22)
(1950, -11)
(1949, 111)
(1949, 78)
输出 (1949, [111,78])
(1950, [0, 22, -11])
名称 reduce
输入 (1949, [111, 78])
(1950, [0, 22, -11])
输出 (1949, 111)
(1950, 22)
功能 遍历整个列表找出最大值

Markdown-数学公式

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

基本语法

行内显示$...$定义

单独显示$$...$$定义

语句为$$\sum_{i=0}^N\int_{a}^{b}g(t,i)\text{d}t$$

$$\sum_{i=0}^N\int_{a}^{b}g(t,i)\text{d}t$$

希腊字母

  • 若需要大写希腊字母,将命令首字母大写即可。
  • 若需要斜体希腊字母,将命令前加上var前缀即可。
显示 命令 显示 命令
α \alpha β \beta
γ \gamma δ \delta
ε \epsilon ζ \zeta
η \eta θ \theta
ι \iota κ \kappa
λ \lambda μ \mu
ν \nu ξ \xi
π \pi ρ \rho
σ \sigma τ \tau
υ \upsilon φ \phi
χ \chi ψ \psi
ω \omega

Tomcat的性能调校

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

###调校的基本步骤

  1. 决定需要测量的对象。
  2. 决定测量的方式。
  3. 测量。
  4. 从测量结果中,了解其含义。
  5. 以预期会提升测量结果的方式来修补系统配置。
  6. 测量,并与之前的测量结果比较。
  7. 回到第4步。

依照实际环境架设Tomcat。试着使用相同的硬件、操作系统、数据库等。越接近实际环境就越可能找到在实际系统中的瓶颈。在另一台机器上安装并配置负载测试用的软件。如果在运行Tomcat的同一台机器上运行,测试结果会不可靠,有时会更糟糕。
让负责测试的机器与运行Tomcat的机器之间通信隔离。这样处理的原因在于在运行高流量的测试时,如果追加了不属于测试的网络流量,将导致这些测试结果变得不可靠。

###测量Web服务器的性能

  1. 负载测试客户端与服务器软件包是在同一台机器吗?
  2. 在测试时,服务器端机器是否正在执行其他的程序?
  3. 客户端与服务器是以千兆位的以太网络,还是100baseT、10baseT相连呢?如果负载测试客户端机器通过低于千兆以太网速度的网络信道链接到服务器端,那么网络链接会降低测试速度,从而改变测试结果。
  4. 是屡次请求相同的网页,混合多种不同的并发请求,还是从庞大的网页清单中随机挑选呢?这能影响服务器及多线程缓存性能。
  5. 测试客户端应按常规方式还是应该以突发方式发送请求呢?按基准调校来说,当您欲知道多快的服务器能完成请求时,应使测试客户端在请求之间不经暂停、快速连续地发送请求。
  6. 运行的服务器是最终配置吗?根据基准调校的需要,应关闭所有调试工作,且还可能要关闭一些日志。
  7. HTTP客户端请求了图像还是仅请求了嵌入于其中的HTML页?

###测试负载的工具

  1. Jmeter
    Jmeter提供了定制测试结果的最具报表特性的选项,是最能适应不同操作系统的工具,而且支持大部分功能。但是,出于某种原因,Jmeter不能像ab和siege所做的那样,每秒钟请求并完成那么多次HTTP请求。
  2. ab
    是一个基准调校工具,所以一般不会把它用于递归测试。
  3. Siege
    Siege是另一个很好的命令行Web负载测试工具。Siege支持多种不同的认证特性,并可执行基准测试、递归测试,还支持”Internet”模式测试(即尽可能仿真在Internet上Web应用程序进行交互的众多实际用户所产生的负载)。

###ab:Apache基准调校工具
在基准调校测试的时候,测试客户端请求HTTP的数量越少,测试客户端提供的测试结果就可能越不精确,因为在基准调校过程中,Java VM的资源回收暂停占用了整个测试时间的较高比重。运行HTTP请求的总数量越多,资源回收暂停变得意义更小,而且基准调校测试结果将更能显示Tomcat的整体性能。您最好运行至少100000个HTTP请求以执行基准调校测试。另外,您可以配置测试客户端,产生您喜欢的客户端线程数,但是,如果您将该线程数设置成超过Tomcat的conf/server.xml文件中提供的连接器(Connector)最大线程数(maxThread),那么实际不会有太大的帮助。在默认的情况下将该线程数设置为150。如果您设置成测试者超过这一数字,而且在更多的线程中产生了比Tomcat拥有的接收线程数和处理线程数还要多的请求,就会影响性能,因为一些客户端请求线程将一直处于等待状态。最好是就保留在连接器的最下线程数(Connector的maxThread)设置下,如使用149的客户端线程。

1
ab -k -n 100000 -c 149 http://127.0.0.1:8080/test

如果在ab命令行中删除-k,那么ab与Tomcat将不使用保持联机(keep-alive)链接,这样处理效率更低,因为它必须链接一个新的TCP包到Tomcat上,以执行每个HTTP请求。结果是每秒要处理的请求数更好了,而且Tomcat到客户端的吞吐量更小了。

1
ab -n 100000 -c 149 http://127.0.0.1:8080/test

###外部调校
当您了解应用程序及Tomcat的实例对负载的响应情形后,就可以开始一些性能调校的处理了,这里有两种基本的调校方式:

  • 外部调校
    涉及到非Tomcat组件的调校,如Tomcat所运行的操作系统,以及运行Tomcat的Java虚拟机器。
    1.JVM的性能
    不同厂商,不同版本之间的基准调校。如果选择Java 1.6,那么您可以对Sun的1.6、IBM的1.6和BEA的1.6版本的虚拟机进行基准调校。
    通常,人们会设法修改JVM启动参数,以使Tomcat JVM能更快地为Web应用程序网页服务。这可以提供一些帮助,但通常不会在性能上提高较高百分比。其主要原因是这样处理不会太有用:JVM提供商在发布JDK之前就已进行过自身测试,寻找哪些设置会产生最佳性能,并让这些设置变成默认值。
    JVM的堆栈内存(heap memory)分配除外。JVM提供商默认选择分配少量内存以启动JVM,且如果Java应用程序需要更多内存,那么在应用程序暂停时,JVM的heap会被重新分配为更大。为了避免这种暂停,可以设置最小heap大小与最大heap大小相等。那样处理的话,JVM将不会在运行的时候尝试扩展heap大小。只要设置JAVA_OPTS环境变量为类似于-Xms512M -Xmx512M之类的值。这意味着最大、最小heap都被设置为512MB。
    2.操作系统的性能
    您的服务器的操作系统是最适合于运行大型、高容量的Web服务器吗?OpenBSD的主要目标在安全防护,所以其核心中许多的限制都设得比较低,以防止各种形式的DOS攻击。Linux的目标是容易使用,所以其限制值会设得比较高。如果您执行任何版本的Microsoft Windows,请确定是Server。在非Server的版本中,终端用户的授权协议和程序代码都可能会限制用户数、可使用的网络连接数或其他限制。
  • 内部调校
    与Tomcat本身有关的调校,包括改变配置文件中的设定值,以及修改Tomcat本身的源代码。
  1. 停用DNS查询
    DNS查询需要耗费网络资源,并涉及多部服务器的往返响应,而这些服务器可能位于遥远的地方,也可能尚未运行,因此导致延迟。
1
2
3
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
enableLookups="true" redirectPort="8443" />

只要将enableLookups的值”true”改成”false”,然后重新启动Tomcat。这样将不再使用DNS查询,也不会有延迟了。

  1. 调整线程数
    另一种对应用程序之Connector性能控制的方法是控制其处理的进程数。Tomcat默认使用线程池以便对传入的请求提供快速响应。
    通过更改Connector的minThreads与maxThreads的值,可以控制所分配的线程数。
    minThreads的值应该大到能够处理最小负载量。即如果在低谷时刻,每秒可访问五次网页,而每次请求在一秒钟之内可完成,则预先分配5个线程就够了。随后在高峰时刻,则需要分配更多线程(最多到maxThreads所设定的数目),为了防止流量暴增(或黑客的DoS攻击)让系统超出JVM的最大内存限制,而使服务器瘫痪,因此一定要设定上限。
  2. 加快JSP的编译速度
    当第一次访问JSP时,此JSP会转换成Java Servlet的源代码,然后必须再编译成Java的bytecode。用请求预编译JSP。
    ###容量规划
    调校Tomcat在线服务器性能的另一重要部分就是容量规划。无论调校多少配置文件与进行多少测试,如果没有符合网站预期流量大小的硬件与带宽,实际上也帮不了忙。
    通过研究及(或)预测网站必须处理的总网络流量,决定可接收的服务质量与寻找满足或超越服务器软件需求,来预测网站所需的计算机硬件、操作系统与带宽的活动。
  3. 经验式的容量规划
    经验式的容量规划师一种轻量级的规划方式,它不一定要很精确,但已足够让公司免于完全不做容量规划的后果。这种方法符合以前的业界经验产生的容量与性能趋势。例如,对于网站在高峰时有多少输出流量,您可以做最佳的预测,然后将该数字加倍。
  4. 企业容量规划的目的是要更精确,因此也需要更久的时间。通常这会使用商业及的容量规划分析软件,以及反复的测试与模拟仿真。

###Tomcat上的容量规划

  1. 服务器计算机硬件
  2. 网络带宽
  3. 服务器操作系统

适用于Tomcat的各种容量规划的一般程序

  1. 找出负载特性。
  2. 分析性能的趋势。
  3. 决定可接收服务的最低需求。例如,可能希望让用户最多等待20秒钟。
  4. 决定要使用何种基础体系的资源,并在分段的环境下测试。
  5. 如果第4步可以符合您的服务需求,就可以订购并部署更多的相同的机器,以作为生产用的服务器计算机。否则,请重复第4步,直到满足服务需求为止。

emacs

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。

开始

启动:emacs [filename]
退出:C-x C-c
挂起:C-z

按键

C-chr表示当输入字符chr时按住CONTROL键。因此C-f就表示:按住CONTROL键再输入f。
M-chr表示当输入字符chr时按住META(或EDIT或ALT)键。如果你的键盘上没有META、EDIT或ALT键,用下述方法也等效:先按一下ESC键然后放开,再输入chr。我们用ESC来表示ESC键。

缓冲区

主(major)模式:M-x fundamental-mode
辅助(minor)模式:辅模式并不能替代主模式,而是提供一些辅助的功能。每个辅模式都可以独立地开启和关闭,跟其它辅模式无关,跟主模式也无关。
切换:C-x o
关闭:C-x 1

窗格

新窗格:C-x 5 2
切换:C-x 5 o
删除当前窗格:C-x 5 0

菜单

显示和隐藏:M-x menu-bar-mode
调用:F10或者M-`

配置

.emacs文件包含LISP函数调用表达式,因此它对语法非常挑剔。

宏

开始录制:C-x (
结束录制:C-x )
执行最后一条宏:C-x e

vim

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

vim

1
2
3
4
mv ~/.vimrc ~/.vimrcbak
mv ~/.vim ~/.vimbak
git clone https://github.com/pauljoo/vim.git
mv vim/.vimrc vim/.vim ~/
  1. 管理插件的插件
  2. 管理窗口和buffer
  3. 语法增强
  4. 代码补全

基本

pathogen

一个管理插件的插件

项目地址

https://github.com/tpope/vim-pathogen

安装

配置

1
2
3
execute pathogen#infect()
syntax on
filetype plugin indent on

auto-pairs

自动匹配括号、引号等

项目地址

https://github.com/jiangmiao/auto-pairs

NERDTree

显示目录树

项目地址

https://github.com/scrooloose/nerdtree

使用

  1. 命令行模式下输入:NERDTree
  2. 为了方便打开NERDTree,我们可以设置快捷键,打开~/.vimrc,插入如下一行
    map :NERDTree
    这样,当打开vim时,只要输入ctrl+n即可打开NERDTree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
文件相关操作
o : 在光标所在的上一个窗口打开文件,并将光标置于新打开的窗口
go : 预览文件,光标停留在NERDTree窗口中
t : 在新标签中打开文件并激活
gt : 在新标签打开文件,光标留在NERDTree窗口中
i : 水平分割打开文件
gi : 水平分割预览
s : 垂直分割打开文件
gs : 垂直分割预览
目录树相关操作
o : 展开/关闭目录
O : 递归展开目录。慎用,如果目录层级多,打开会很慢
x : 关闭父目录
C : 切换光标所在目录为根目录
u : 切换目录树的根目录为上层目录
U : 切换目录树的根目录为上层目录,并保持旧的目录树的状态
r : 刷新当前目录
R : 刷新当前根目录(这个在新加入文件后会用到)
cd : 切换vim工作目录为光标所在目录(命令模式下:pwd可查看当前工作目录)

MiniBufExplorer

显示已打开的buffer

项目地址

1
mkdir -p ~/.vim/bundle/minibufexplorer/plugin && wget "http://www.vim.org/scripts/download_script.php?src_id=3640" -O ~/.vim/bundle/minibufexplorer/plugin/minibufexpl.vim

使用

命令行模式下通过:vsp filename打开另一个文件

代码

ctags

是用来对代码建索引,方便查找的,有些Linux版本是自带ctags的,如果没有,按如下方式安装

安装

1
yum install ctags

taglist

taglist是vim的一个插件,可以将代码内的函数、变量等按规律列出来,方便查找

项目地址

http://www.vim.org/scripts/script.php?script_id=273

目录结构

1
2
3
4
5
taglist
|-- doc
| |-- taglist.txt
|-- plugin
|-- taglist.viml

配置

打开~/.vimrc,输入如下内容

1
2
3
4
let Tlist_Show_One_File=1    " 只展示一个文件的taglist
let Tlist_Exit_OnlyWindow=1 " 当taglist是最后以个窗口时自动退出
let Tlist_Use_Right_Window=1 " 在右边显示taglist窗口
let Tlist_Sort_Type="name" " tag按名字排序

omnicppcomplete

这是一个对C++进行语法补全的插件,可以对函数、命名空间、类成员等进行补全,使用起来和绝大多数IDE差不多,不一样的是IDE为你做了很多你不知道的事情,而omni补全需要依赖tags文件,需要你用ctags命令自己生成

项目地址

1
cd ~/.vim/bundle && wget "http://www.vim.org/scripts/download_script.php?src_id=7722" -O omnicppcomplete.zip && unzip omnicppcomplete.zip -d omnicppcomplete

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
├── after
│ └── ftplugin
│ ├── cpp.vim
│ └── c.vim
├── autoload
│ └── omni
│ ├── common
│ │ ├── debug.vim
│ │ └── utils.vim
│ └── cpp
│ ├── complete.vim
│ ├── includes.vim
│ ├── items.vim
│ ├── maycomplete.vim
│ ├── namespaces.vim
│ ├── settings.vim
│ ├── tokenizer.vim
│ └── utils.vim
└── doc
└── omnicppcomplete.txt

配置

打开~/.vimrc,输入如下内容

1
2
3
4
5
6
filetype plugin indent on
set completeopt=longest,menu
let OmniCpp_NamespaceSearch = 2 " search namespaces in the current buffer and in included files
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

手动建立tags文件

omni插件的补全是依赖于tags文件的

1
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

SuperTab

你想要补全变量名或函数名只需按一下TAB键即可,出现候选窗口之后也可以用TAB键进行选择

项目地址

https://github.com/ervandew/supertab

代码整洁

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

“如果每个例程都让你感到深合己意,那就是整洁代码”-沃德

SRP原则(单一权责原则):只有一个修改它的理由。

OCP原则(开放闭合原则):对扩展开放,对修改闭合。

要确保函数只做一件事,函数中的语句都要在同一抽象层级上。

如果函数看来需要两个/三个或三个以上的参数,就说明其中一些参数应该封装为类了。

期望、方差、协方差和矩

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

期望E

离散型随机变量

所有可能取值的一个加权平均

$E[X]=\sum_{x:p(x)>0}xp(x)$

连续型随机变量

$E[X] = \int_{-\infty}^{\infty}xf(x)dx$

方差Var

X与其期望的差的平方的期望

$Var(X) = E[(X-\mu)^2] = E[X^2] - (E[X])^2$

协方差Cov

期望和方差可以给出单个随机变量的信息,两个随机变量的协方差可指示两个随机变量之间的关系

$Cov(X, Y) = E[(X-E(X))(Y-E(Y))]=E[XY]-E[X]E[Y]$

相关系数

设X, Y为两个随机变量,假定Var(X)和Var(Y)均大于0,则

$\rho(X, Y) = \frac{Cov(X, Y)}{\sqrt{Var(X)Var(Y)}}$
称为X和Y的相关系数

矩

数学期望和方差可以纳入到一个更一般的概念范畴中,那就是随机变量的矩。
设X为随机变量,k为正整数,如果$E(X^k)$存在,则称$E(X^k)$为X的k阶原点矩
如果$E[(X-E(X))^k]$存在,则称$E[(X-E(X))^k]$为X的k阶中心矩
显然,一阶原点矩就是数学期望,二阶中心矩就是方差

版本控制

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

版本号

  1. 主版本号
    就API修改而言,主版本号的改变表明添加了大量向后兼容的新特性,或者向后兼容性遭到了破坏。总之,API主版本号的增长向客户表明API进行了重大修改。
  2. 次版本号
    每当添加较小的特性或修正重大错误时这个数会增大。次版本号的修改通常不应该涉及任何不兼容的API修改。用户应该能够升级到新的次版本,而不必对自己的软件做任何改动。不过一些新的特性可能被添加到API中。
  3. 补丁版本号
    补丁版本号的变更应该暗示现行的API接口没有修改,也就是只有API的行为有所改变。

提供API的版本信息

API的版本信息应该可以在代码中访问,以便允许客户以API版本号为条件编写代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//version.h
#define API_MAJOR 1
#define API_MINOR 2
#define API_PATCH 0
class Version
{
public:
static int GetMajor();
static int GetMinor();
static int GetPatch();
static std::string GetVersion();
static bool IsAtLeast(int major, int minor, int patch);
static bool HasFeature(const std::string &name);
}

软件分支策略

大型软件项目通常会涉及某种形式的分支策略,这就需要同步开发、固定及维护不同的软件发布版本。

分支策略

每个软件项目都需要一条”主干”代码路线,它是项目源代码的持久存储库。对于每次版本发布,或者必须与下次发布区分的开发工作,可由主干代码派发出分支。这个模型支持并行开发,可以将新特性加入项目,同时锁定对即将发布版本的修改,使现存的特性集保持稳定。

只在必要时再分支,尽量延迟创建分支的时间。尽量使固体不过分支代码路线而非冻结代码路线。尽早且频繁地合并分支。

编程珠玑-随机抽样

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

该算法按顺序考虑整数0,1,2,…,n-1,并通过合适的随机测试选择每个元素。通过按序访问整数,就能保证输出结果是有序的。

下面通过m=2和n=5这个例子来理解选择条件。选择第一个整数0,概率为2/5,程序通过下面的语句来实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Random random = new Random();
int n = 100;//总的样本数
int m = 50;//抽取的样本数

int select = m;
int remaining = n;
for(int i = 0; i < n; i++)
{
if((random.nextInt() % remaining) < select && select > 0)
{
System.out.println(i);
select--;
}
remain++;
}

通过源代码安装nagios

发表于 2018-12-30 | 更新于 2020-05-17 | 分类于 其他

目的

这个文档描述了如何在CentOS和Ubuntu服务器上通过源代码安装Nagios Core和Nagios Plugins

目标读者

所有想要通过源代码安装Nagios Core

先决条件

Ubuntu

执行这个文档里面的所有步骤使用root权限,下面的命令可以切换到root shell。
sudo -i

在不同的平台安装Nagios,对于依赖包的要求会有所不同。
RHEL/CentOS:
yum install -y wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp

Ubuntu:
sudo apt-get install wget build-essential apache2 php5-gd libgd2-xpm libgd2-xpm-dev libapache2-modphp5

下载Nagios Core和Nagios Plugins Tarballs

所有系统,在你的终端中运行以下命令:
cd /tmp
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.4.tar.gz
wget http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz
这里会下载Nagios Core和它所要求的插件

增加Nagios用户和组

为了Nagios进程的运行增加适当的用户和组
useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios

Nagios Core安装

tar zxvf nagios-4.0.4.tar.gz
tar zxvf nagios-plugins-2.0.tar.gz
切换到Nagios目录然后安装package:
cd nagios-4.0.4

RHEL/CentOS:
./configure –with-command-group=nagcmd
Ubuntu:
./configure –with-nagios-group=nagios –with-command-group=nagcmd -–with-mail=/usr/bin/sendmail

所有系统:
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios start

RHEL/CentOS:
/etc/init.d/httpd start

创建一个默认用户用于Web访问

htpasswd –c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Nagios Plugin安装

cd /tmp/nagios-plugins-2.0
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install

Nagios Service设置

下面的命令会注册系统启动时运行Nagios守护进程
chkconfig –add nagios
chkconfig –level 35 nagios on
chkconfig –add httpd
chkconfig –level 35 httpd on

Ubuntu:
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios
Nagios Web界面

在安装正确的步骤安装后,你可以通过web浏览器访问Nagios Core。
使用一下:
http://<your.nagios.server.ip>/nagios
使用你在向htpasswd.users文件里增加nagiosadmin用户时你选择的凭证。

123…22

Paul Jiang

212 日志
26 分类
26 标签
Links
  • 褚霸
  • 章亦春
  • Martin Fowler
© 2020 Paul Jiang
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v6.5.0