进行此更改后保存并关闭文件。虽然这种修改可能会增加Netdata将使用的RAM量,但我们将在下一步中实施的下一个修改应该会显著减少它。
第三步 - 启用内核同页合并即使Netdata直接运行并初始情况下使用,我们可以对Netdata使用系统资源的方式进行更多修改,这将加速并优化其性能。我们将从启用内核同页合并(简称KSM)开始。Netdata开发人员估计这会将Netdata的内存使用量降低40-60%。
启用后,KSM守护程序会定期扫描内存,查找可由单个写保护页替换的相同内容的页面。在此上下文中,它允许在系统上运行的不同进程或程序之间共享相同的内存页。这减少了不必要的重复内存内容的创建。
要永久启用Linux系统内核的此方面,请使用文本编辑器打开/etc/rc.local文件。
$ sudo nano /etc/rc.local在启动所有其他正常Linux系统服务和进程之后,将执行/etc/rc.local文件或运行控制文件。它对于指定自定义服务很有用-或者,在我们的示例中,用于在服务器运行时启用KSM。
将下面显示的两个命令添加到文件末尾,在最后exit 0一行之前,如下所示:
/etc/rc.local
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. echo 1 > /sys/kernel/mm/ksm/run echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs exit 0echo 1 > /sys/kernel/mm/ksm/run 第一个命令将1添加到runKSM内核文件中,该文件启用该功能。第二个命令echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs 告诉KSM守护程序每秒运行一次并评估100个页面以进行重复数据删除。
保存并关闭文件后,KSM现在将在下次服务器重新启动时启用,并在将来重新启动时保留。要在此服务器的当前正常运行时间内启用它,您需要在命令行上手动运行您添加到rc.local的两个命令。
首先,通过在sudo中使用-s标志,启动并输入新的shell会话作为服务器的root用户。这是必要的,因为早期的两个命令使用输出重定向(通过>运算符)并且需要由root shell执行才能成功。
$ sudo -s现在输入之前的两个命令:
echo 1 > /sys/kernel/mm/ksm/run echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs然后,保留root shell并返回正常的shell会话。
$ exit最后,要应用我们在此步骤以及此前的步骤中执行的所有更改,我们必须重新启动Netdata。
$ sudo systemctl restart netdata您可以通过在Netdata仪表板中查找新添加的活动KSM图表来验证KSM现在是否已启用。这可以在右侧菜单树中的Memory > Memory Deduper下找到。
KSM Chart Image现在我们知道仪表板和KSM正在运行,值得通过像Nginx这样的Web服务器而不是内置的Web服务器来访问仪表板。这不是完全必要的,但建议使用,因此请按照下一步进行设置。
第四步 - 通过Nginx托管仪表板(可选)通过Nginx托管Netdata可以更轻松地保护对仪表板的访问,并且如果需要,还可以让您在将来指向其他服务器的Netdata仪表板。
您还需要安装apache2-utils软件包。该软件包包含htpasswd程序,稍后我们将需要该程序来保护对仪表板页面的访问。
$ sudo apt-get install apache2-utils接下来,创建一个新的Nginx主机配置文件。请注意,在这里,我们在/conf.d目录中使用了一个文件,但是如果您使用Nginx进行Netdata以外的其他操作,则可以使用/sites-available和/ sites-enabled。
$ sudo nano /etc/nginx/conf.d/default.conf此配置文件将告诉Nginx代理仪表板页面的传入请求。我们还将添加一个简单的身份验证提示,以便只有具有正确用户名和密码的人才能访问它。
以下是您要复制和粘贴的整个配置文件。将上述listen和server_name指令的两个红色突出显示项分别更改为服务器的IP地址和分配的域名。注意在每个末尾包括;。如果您没有域名,可以将server_name指令保留为example.com。
/etc/nginx/conf.d/default.conf
upstream netdata-backend { server 127.0.0.1:19999; keepalive 64; } server { listen your_server_ip:80; server_name example.com; auth_basic "Authentication Required"; auth_basic_user_file netdata-access; location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass ; proxy_http_version 1.1; proxy_pass_request_headers on; proxy_set_header Connection "keep-alive"; proxy_store off; } }一旦确定自己的文件与此代码块匹配,就可以保存并退出以返回到命令提示符。
让我们解释一下这个文件,让你了解它在做什么。这是第一部分:
/etc/nginx/conf.d/default.conf
upstream netdata-backend { server 127.0.0.1:19999; keepalive 64; }