Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

github.com/assafmo/couchdb-linux-performance

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/assafmo/couchdb-linux-performance

  • v0.0.0-20190516080213-5246bea9569d
  • Source
  • Go
  • Socket score

Version published
Created
Source

Linux tuning for better CouchDB performance

Filesystem tuning

ext4

Mount options (or via /etc/fstab)

errors=remount-ro,noatime,nouser_xattr,barrier=0

Journal

(Replace sdXY with your partition name)

Check if exists

sudo tune2fs -l /dev/sdXY | fgrep has_journal

Turn Off/On

Unmount filesystem (If root filesystem then mount read-only) and then:
tune2fs -O ^has_journal /dev/sdXY

xfs

Mount options (or via /etc/fstab)

noatime,nodiratime,logbufs=8,logbsize=256k,nobarrier

/etc/rc.local

(Replace sdX with your device name)

####
## IO Scheduler
####

# First, set an appropriate IO scheduler for file servers.
# deadline - For spinning disks
# noop     - For VMs and SSDs
echo noop > /sys/block/sdX/queue/scheduler

# Now give the IO scheduler more flexibility by increasing the number of schedulable requests:
echo 4096 > /sys/block/sdX/queue/nr_requests

# To improve throughput for sequential reads, increase the maximum amount of read-ahead data.
# The actual amount of read-ahead is adaptive,
# so using a high value here won't harm performance for small random access.
echo 4096 > /sys/block/sdX/queue/read_ahead_kb

####
## Virtual memory settings
####

# To avoid long IO stalls (latencies) for write cache flushing
# in a production environment with very different workloads,
# you will typically want to limit the kernel dirty (write) cache size:
echo 5 > /proc/sys/vm/dirty_background_ratio
echo 10 > /proc/sys/vm/dirty_ratio

# Assigning slightly higher priority to inode caching helps
# to avoid disk seeks for inode loading:
echo 50 > /proc/sys/vm/vfs_cache_pressure

# Decrease swappiness to prevent swapping as much as possible
echo 1 > /proc/sys/vm/swappiness

# Buffering of file system data requires frequent memory allocation.
# Raising the amount of reserved kernel memory will enable faster and more reliable
# memory allocation in critical situations.
# Raise the corresponding value to 64MB if you have less than 8GB of memory,
# otherwise raise it to at least 256MB:
echo 262144 > /proc/sys/vm/min_free_kbytes

# It is recommended to have transparent huge pages disabled:
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled

####
## Process scheduler
####

# There's a kernel parameter that determines how long a migrated process has to be running
# before the kernel will consider migrating it again to another core.
# The sysctl name is sched_migration_cost_ns, default value 50000 (that's ns so 0.5 ms).
# Forking servers, like PostgreSQL or Apache, scale to much higher levels of concurrent
# connections if this is made larger, by at least an order of magnitude:
echo 5000000 > /proc/sys/kernel/sched_migration_cost_ns

# Another parameter that can dramatically impact forking servers is sched_autogroup_enabled.
# This setting groups tasks by TTY, to improve perceived responsiveness on an interactive system.
# On a server with a long running forking daemon, this will tend to keep child processes from
# migrating away as soon as they should.
# It can be disabled like so:
echo 0 > /proc/sys/kernel/sched_autogroup_enabled

####
## CPU
####

# Set the scaling governor to performance. This keeps the CPU at maximum frequency
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Apply the changes

sudo /etc/rc.local or reboot

ionice

:warning: Using ionice is effective if and only if IO scheduler uses an algorithm that takes priorities into account. If you have followed this guide so far, using ionice will have no effect since you have set IO Scheduler to deadline or noop which doesn't use priorities. Look for cfq for a scheduler that works with priorities.

Giving CouchDB IO priority with ionice: sudo ionice -p $(pidof beam.smp) -c 1 -n 0.
This can also be done in a systemd unit:

IOSchedulingClass=1
IOSchedulingPriority=0

Sources:

FAQs

Package last updated on 16 May 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc