Differences
This shows you the differences between two versions of the page.
linux_wiki:kernel_tuning [2015/10/04 00:45] billdozor |
linux_wiki:kernel_tuning [2019/05/25 23:50] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Kernel Tuning ====== | ||
- | **General Information** | ||
- | |||
- | Kernel tuning using sysctl.conf | ||
- | |||
- | **Checklist** | ||
- | * Any distro, but many examples are done via Red Hat based systems | ||
- | |||
- | ---- | ||
- | |||
- | ===== Hugepages ===== | ||
- | |||
- | Problem: Unable to access a VM's console, and it shows out of memory errors on boot. | ||
- | |||
- | Solution: Reduce the value of " | ||
- | |||
- | / | ||
- | <code bash> | ||
- | vm.nr_hugepages = 1024 | ||
- | </ | ||
- | 1 hugepage = 2 MBs, so the above is equal to 2GB | ||
- | |||
- | Explanation: | ||
- | |||
- | Alternative config location: Hugepages could also be configured at / | ||
- | |||
- | ==== HugePage Bug ==== | ||
- | |||
- | On some kernels, khugepaged can start running at 100% CPU utilization. This is typically seen on systems that have process/ | ||
- | |||
- | Other symptoms include: | ||
- | * Normal commands hang (w, uptime, ps) | ||
- | * Processes showing above 100% CPU (ie sometimes up to 1,300%) | ||
- | |||
- | Details | ||
- | * Known Affected kernels | ||
- | * CentOS 6: 2.6.32-431.el6.x86_64 | ||
- | * Reference bug report: https:// | ||
- | |||
- | === Workaround Fix === | ||
- | |||
- | Disable hugepage defragmenting: | ||
- | <code bash> | ||
- | echo never > / | ||
- | </ | ||
- | |||
- | Add new cron entry | ||
- | <code bash> | ||
- | vim / | ||
- | |||
- | # Disable kernel huge page defrag due to bugzilla bug: 879801 | ||
- | @reboot root /bin/echo never | / | ||
- | </ | ||
- | |||
- | === Permanent Fix === | ||
- | |||
- | Ultimately, the permanent fix is to update the kernel to a newer version. | ||
- | |||
- | TODO: Will add confirmed kernel versions that this bug is fixed in. | ||
- | |||
- | ---- | ||
- | |||
- | ===== Swappiness ===== | ||
- | |||
- | Swappiness controls how likely the kernel is to move processes out of memory and onto swap disk space. | ||
- | |||
- | The setting is from 0 to 100. | ||
- | * 0 = Very aggressively avoid swapping for as long as possible | ||
- | * High risk of OOM killing from memory and I/O pressure | ||
- | * 10 = Red Hat recommended for Oracle databases | ||
- | * **60 = Linux default** | ||
- | * 100 = Aggressively swap from memory to disk | ||
- | |||
- | Check the setting: | ||
- | <code bash> | ||
- | cat / | ||
- | 60 | ||
- | </ | ||
- | |||
- | To change the setting: edit sysctl.conf, | ||
- | <code bash> | ||
- | vim / | ||
- | vm.swappiness=10 | ||
- | :wq | ||
- | sysctl -p | ||
- | </ | ||
- | |||
- | More details about OOM: https:// | ||
- | |||
- | ---- | ||
- | |||
- | ===== Page Cache ===== | ||
- | |||
- | Tuning how often cached pages in memory are flushed to disk. | ||
- | |||
- | Check current settings: | ||
- | <code bash> | ||
- | sysctl -a | grep dirty | ||
- | </ | ||
- | |||
- | Background (async) pagecache flushing: | ||
- | <code bash> | ||
- | vm.dirty_background_ratio = 3 | ||
- | </ | ||
- | * Explanation: | ||
- | * Default value = 10 | ||
- | |||
- | Foreground (sync) pagecache flushing: | ||
- | <code bash> | ||
- | vm.dirty_ratio = 15 | ||
- | </ | ||
- | * Explanation: | ||
- | * Default value = 20 | ||
- | |||
- | ---- | ||
- | |||
- | ===== File Descriptors ===== | ||
- | |||
- | Viewing and setting the system wide file descriptors. | ||
- | |||
- | **View system wide file descriptor information** | ||
- | <code bash> | ||
- | sysctl fs.file-nr | ||
- | fs.file-nr = 6144 0 809542 | ||
- | </ | ||
- | |||
- | The three numbers returned: | ||
- | * 6144 = used file descriptors | ||
- | * 0 = allocated but not used | ||
- | * 809542 = system max | ||
- | |||
- | |||
- | **Change System FD Limits** | ||
- | |||
- | Edit / | ||
- | <code bash> | ||
- | fs.file-max = 810542 | ||
- | </ | ||
- | Example above increases system wide max by 1,000. | ||
- | |||
- | More details, including per user settings: https:// | ||
- | |||
- | ---- |