4 captures
09 May 2020 - 06 Oct 2025
Sep OCT Nov
30
2019 2020 2021
success
fail

About this capture

COLLECTED BY

Collection: Common Crawl

Web crawl data from Common Crawl.
TIMESTAMPS

The Wayback Machine - http://web.archive.org/web/20201030213045/https://learn.netdata.cloud/docs/agent/performance/
 

Menu
LearnDocsGuides
CommunityBlogGitHubNetdata, Inc.
🌜
🌞

Learn
Docs
Guides
Community
Blog
GitHub
Netdata, Inc.


Learn
Netdata Docs
Overview
What is Netdata?
Why use Netdata?
Use Netdata standalone or as part of your monitoring stack
Get Netdata
Quickstart
Single-node monitoring
Infrastructure monitoring
Configure
Set up Spaces and War Rooms
Invite your team and collaborate
Configure your nodes
Secure your nodes
Collect
How Netdata's metrics collectors work
Enable or configure a collector
System metrics
Container metrics
Application metrics
Supported collectors list
Visualize
See an overview of your infrastructure
Interact with dashboards and charts
Create new dashboards
Monitor
View active health alarms
Configure health alarms
Enable notifications
Store
Distributed data architecture
Change how long Netdata stores metrics
Export
Export metrics to external time-series databases
Enable an exporting connector
Reference
Agent
Agent reference docs
Get started guide
Security design
Use the Agent with Netdata Cloud
Agent-Cloud link (ACLK)
Agent claiming
Collectors
Collecting metrics
Collectors quickstart
Collectors configuration reference
Internal plugins
proc.plugin
statsd.plugin
cgroups.plugin
idlejitter.plugin
tc.plugin
checks.plugin
diskspace.plugin
freebsd.plugin
macos.plugin
External plugins
External plugins overview
Go
go.d.plugin
Modules
ActiveMQ
Apache
Bind9
CockroachDB
Consul
CoreDNS
CouchDB
Dnsmasq DHCP
DNS queries
Docker Engine
Docker Hub repositories
Elasticsearch
Files and Dirs
Fluentd
FreeRADIUS
HDFS
HTTP endpoints
ISC DHCPd
Java Spring Boot 2 applications
Kubelet
kube-proxy
Lighttpd
Lighttpd2
Logstash
MySQL
NGINX
OpenVPN
phpDaemon
PHP-FPM
Pi-hole
Prometheus endpoints
Pulsar
RabbitMQ
ScaleIO
Service discovery
Solr
Systemd units
TCP endpoints
Tengine
Unbound
vCenter Server Appliance
vCenter Servers
VerneMQ
Web server logs (Apache, NGINX)
Web server logs (Squid)
Whois domain expiry
Windows machines
x509 certificates
ZooKeeper
Python
python.d.plugin
Modules
Adaptec RAID
AM2320
Apache
Beanstalk
BOINC
CEPH
Chrony
CouchDB
DNS query RTT
Docker Engine
Dovecot
Elasticsearch
Energi Core
Example
Exim
Fail2ban
FreeRADIUS
Gearman
Go applications
HAProxy
Hard drive temperature
HP Smart Storage Arrays
HTTP endpoints
Icecast
IPFS
ISC Bind
ISC DHCP
Linux machine sensors
LiteSpeed
systemd-logind
MegaRAID controllers
Memcached
MongoDB
Monit
MySQL
NGINX
NGINX Plus
NSD
NTP daemon
Nvidia GPUs
OpenLDAP
OracleDB
OpenVPN
PHP-FPM
Postfix
PostgreSQL
PowerDNS
PowerDNS dnsdist
ProxySQL
Puppet
RabbitMQ
Redis
RethinkDB
RetroShare
Riak KV
Samba
S.M.A.R.T. attributes
SpigotMC
Java Spring Boot 2 applications
Squid
TCP endpoints
Tomcat
Tor
Traefik
uWSGI
Varnish Cache
1-Wire sensors
Web server logs (Apache, NGINX, Squid)
Node.js
node.d.plugin
Modules
Fronius Symo
ISC BIND
SMA Sunny WebBox
SNMP
Stiebel Eltron ISG
Bash
charts.d.plugin
Modules
Access points
APC UPS
Example
Libreswan IPSec tunnels
OpenSIPS
UPS/PDU
eBPF
apps.plugin
cups.plugin
fping.plugin
ioping.plugin
freeipmi.plugin
nfacct.plugin
xenstat.plugin
perf.plugin
slabinfo.plugin
Daemon/configuration
Netdata daemon
Configuration guide
Daemon configuration
Performance
Netdata for IoT
High performance Netdata
Database
Database
Database engine
Export
Reference guide
Connectors
AWS Kinesis Data Streams
Google Cloud Pub/Sub Service
MongoDB
OpenTSDB with HTTP
Prometheus remote write
Guides
Using Netdata with Prometheus
Writing metrics to TimescaleDB
Health
Health monitoring
Health quickstart
Health configuration reference
Netdata alarm notifications
Supported notifications
alerta.io
Amazon SNS
Custom
Discordapp.com
Dynatrace
Email
flock.com
Hangouts Chat
IRC
Kavenegar
Matrix
Messagebird
Opsgenie
PagerDuty
prowl
PushBullet
PushOver
Rocket.Chat
Slack
SMS Server Tools 3
StackPulse
Syslog
Telegram
Twilio
Dashboard
HTTP API
API
Exporters
Exporters
prometheus exporter
shell exporter
Formatters
Query formatting
CSV formatter
JSON formatter
SSV formatter
Value formatter
Netdata badges
Health API Calls
Queries
Database Queries
Average or Mean
double exponential smoothing
Incremental Sum (`incremental_sum`)
Max
Median
Min
Single (or Simple) Exponential Smoothing (`ses`)
standard deviation (`stddev`)
Sum
Packaging
Installation guide
Other methods
Install Netdata with .deb/.rpm packages
Install Netdata with kickstart.sh
Install Netdata with kickstart-static64.sh
Install Netdata on a Kubernetes cluster
Install Netdata with Docker
Install Netdata on cloud providers
Install Netdata on macOS
Install Netdata on FreeBSD
Install Netdata on Linux from a Git checkout
Install Netdata on offline systems
Install Netdata on pfSense
Install Netdata on Synology
Install Netdata on FreeNAS
Install Netdata on Alpine 3.x
Netdata distribution support matrix
Update Netdata
Uninstall Netdata
Netdata static binary build
libnetdata
libnetdata
Adaptive Re-sortable List (ARL)
AVL
BUFFER
clocks
Netdata ini config files
dictionary
ebpf
eval
json
locks
log
popen
PROCFILE
Netdata simple patterns
socket
statistical
Netdata storage number
threads
url
Registry
Streaming and replication
Web
Web dashboards overview
The standard web dashboard
Custom dashboards
Atlassian Confluence dashboards
Web server
Web server
`static-threaded` web server
Running behind another web server
Running Netdata behind Nginx
Netdata via apache's mod_proxy
Netdata via lighttpd v1.4.x
Netdata via Caddy
Netdata via HAProxy
Additional information
Anonymous statistics
Netdata contrib
Testing
Health command API tester
Data structures
Cloud
Netdata Cloud reference docs
Get started with Cloud
Spaces
War Rooms
Visualizations
Overview
Nodes view
Build new dashboards
Metric Correlations
Monitor
View active alarms
Collaborate
Manage
Sign in with email, Google, or GitHub
Invite your team
FAQ and glossary
Contributing
Contributing
Contributing to documentation
Netdata style guide
Contributor Covenant Code of Conduct
Manually build Netdata from source

Performance


Netdata performance is affected by:
Data collection
the number of charts for which data are collected
the number of plugins running
the technology of the plugins (i.e. BASH plugins are slower than binary plugins)
the frequency of data collection
You can control all the above.
Web clients accessing the data
the duration of the charts in the dashboard
the number of charts refreshes requested
the compression level of the web responses

Netdata Daemon

For most server systems, with a few hundred charts and a few thousand dimensions, the Netdata daemon, without any web clients accessing it, should not use more than 1% of a single core.
To prove Netdata scalability, check issue #1323 where Netdata collects 95.000 metrics per second, with 12% CPU utilization of a single core!
In embedded systems, if the Netdata daemon is using a lot of CPU without any web clients accessing it, you should lower the data collection frequency. To set the data collection frequency, edit /etc/netdata/netdata.conf and set update_every to a higher number (this is the frequency in seconds data are collected for all charts: higher number of seconds = lower frequency, the default is 1 for per second data collection). You can also set this frequency per module or chart. Check the daemon configuration for plugins and charts. For specific modules, the configuration needs to be changed in:
python.d.conf for python
node.d.conf for nodejs
charts.d.conf for bash

Plugins

If a plugin is using a lot of CPU, you should lower its update frequency, or if you wrote it, re-factor it to be more CPU efficient. Check External Plugins for more details on writing plugins.

CPU consumption when web clients are accessing dashboards

Netdata is very efficient when servicing web clients. On most server platforms, Netdata should be able to serve 1800 web client requests per second per core for auto-refreshing charts.
Normally, each user connected will request less than 10 chart refreshes per second (the page may have hundreds of charts, but only the visible are refreshed). So you can expect 180 users per CPU core accessing dashboards before having any delays.
Netdata runs with the lowest possible process priority, so even if 1000 users are accessing dashboards, it should not influence your applications. CPU utilization will reach 100%, but your applications should get all the CPU they need.
To lower the CPU utilization of Netdata when clients are accessing the dashboard, set web compression level = 1, or disable web compression completely by setting enable web responses gzip compression = no. Both settings are in the [web] section.

Monitoring a heavily-loaded system

While running, Netdata does not depend much on disk I/O aside from writing to log files and the database engine "spilling" historical metrics to disk when it uses all its available RAM.
Under a heavy system load, plugins that need disk may stop and show gaps during heavy system load, but the Netdata daemon itself should be able to work and collect values from /proc and /sys and serve web clients accessing it.
Keep in mind that Netdata saves its database when it exits, and loads it up again when started.

Netdata process priority

By default, Netdata runs with the idle process scheduler, which assigns CPU resources to Netdata, only when the system has such resources to spare.
The following netdata.conf settings control this:

[global]
 process scheduling policy = idle
 process scheduling priority = 0
 process nice level = 19
The policies supported by Netdata are idle (the Netdata default), other (also as nice), batch, rr, fifo. Netdata also recognizes keep and none to keep the current settings without changing them.
For other, nice and batch, the setting process nice level = 19 is activated to configure the nice level of Netdata. Nice gets values -20 (highest) to 19 (lowest).
For rrand fifo, the setting process scheduling priority = 0 is activated to configure the priority of the relative scheduling policy. Priority gets values 1 (lowest) to 99 (highest).
For the details of each scheduler, see man sched_setscheduler and man sched.
When Netdata is running under systemd, it can only lower its priority (the default is other with nice level = 0). If you want to make Netdata to get more CPU than that, you will need to set in netdata.conf:

[global]
 process scheduling policy = keep
and edit /etc/systemd/system/netdata.service and add:

CPUSchedulingPolicy=other | batch | idle | fifo | rr
CPUSchedulingPriority=99
Nice=-10

Running Netdata in embedded devices

Embedded devices usually have very limited CPU resources available, and in most cases, just a single core.
keep in mind that Netdata on RPi 2 and 3 does not require any tuning. The default settings will be good. The following tunables apply only when running Netdata on RPi 1 or other very weak IoT devices.
We suggest to do the following:

1. Disable External plugins

External plugins can consume more system resources than the Netdata server. Disable the ones you don't need. If you need them, increase their update every value (again in /etc/netdata/netdata.conf), so that they do not run that frequently.
Edit /etc/netdata/netdata.conf, find the [plugins] section:

[plugins]
 proc = yes
 tc = no
 idlejitter = no
 cgroups = no
 checks = no
 apps = no
 charts.d = no
 node.d = no
 python.d = no
 plugins directory = /usr/libexec/netdata/plugins.d
 enable running new plugins = no
 check for new plugins every = 60
In detail:
plugindescription
procthe internal plugin used to monitor the system. Normally, you don't want to disable this. You can disable individual functions of it at the next section.
tcmonitoring network interfaces QoS (tc classes)
idlejitterinternal plugin (written in C) that attempts show if the systems starved for CPU. Disabling it will eliminate a thread.
cgroupsmonitoring linux containers. Most probably you are not going to need it. This will also eliminate another thread.
checksa debugging plugin, which is disabled by default.
appsa plugin that monitors system processes. It is very complex and heavy (consumes twice the CPU resources of the Netdata daemon), so if you don't need to monitor the process tree, you can disable it.
charts.dBASH plugins (squid, nginx, mysql, etc). This is a heavy plugin, that consumes twice the CPU resources of the Netdata daemon.
node.dnode.js plugin, currently used for SNMP data collection and monitoring named (the name server).
python.dhas many modules and can use over 20MB of memory.
For most IoT devices, you can disable all plugins except proc. For proc there is another section that controls which functions of it you need. Check the next section.

2. Disable internal plugins

In this section you can select which modules of the proc plugin you need. All these are run in a single thread, one after another. Still, each one needs some RAM and consumes some CPU cycles. With all the modules enabled, the proc plugin adds ~9 MiB on top of the 5 MiB required by the Netdata daemon. 

[plugin:proc]
 # /proc/net/dev = yes # network interfaces
 # /proc/diskstats = yes # disks
...
Refer to the proc.plugins documentation for the list and description of all the proc plugin modules.

3. Lower internal plugin update frequency

If Netdata is still using a lot of CPU, lower its update frequency. Going from per second updates, to once every 2 seconds updates, will cut the CPU resources of all Netdata programs in half, and you will still have very frequent updates.
If the CPU of the embedded device is too weak, try setting even lower update frequency. Experiment with update every = 5orupdate every = 10 (higher number = lower frequency) in netdata.conf, until you get acceptable results.
Keep in mind this will also force dashboard chart refreshes to happen at the same rate. So increasing this number actually lowers data collection frequency but also lowers dashboard chart refreshes frequency.
This is a dashboard on a device with [global].update every = 5 (this device is a media player and is now playing a movie): 
pi1

4. Disable logs

Normally, you will not need them. To disable them, set:

[global]
 debug log = none
 error log = none
 access log = none

5. Lower Netdata's memory usage

You can change the amount of RAM and disk the database engine uses for all charts and their dimensions with the following settings in the [global] section of netdata.conf:

[global]
 # memory mode = dbengine
 # page cache size = 32
 # dbengine disk space = 256
See the database engine documentation or our guide on metrics retention for more details on lowering the database engine's memory requirements.

6. Disable gzip compression of responses

Gzip compression of the web responses is using more CPU that the rest of Netdata. You can lower the compression level or disable gzip compression completely. You can disable it, like this:

[web]
 enable gzip compression = no
To lower the compression level, do this:

[web]
 enable gzip compression = yes
 gzip compression level = 1
Finally, if no web server is installed on your device, you can use port tcp/80 for Netdata:

[web]
 port = 80

Edit this page
Last updated on 


Previous
« Daemon configuration

Next
Netdata for IoT »
Contents
Netdata Daemon
Plugins
CPU consumption when web clients are accessing dashboards
Monitoring a heavily-loaded system
Netdata process priority
Running Netdata in embedded devices
1. Disable External plugins
2. Disable internal plugins
3. Lower internal plugin update frequency
4. Disable logs
5. Lower Netdata's memory usage
6. Disable gzip compression of responses
Edit this page

Agent
Cloud
Integrations
Status
Learn
Blog
GitHub
Overview
Forums
About
News
Careers
Copyright © 2020 Netdata, Inc. Built with Docusaurus.