First of all, this article mainly applies to Amazon Linux EC2 with low memory instance type such as t2.nano and t2.micro. The instructions below are also specific Amazon Linux AMIwho likes Centosbased on RHEL (Red Hat Enterprise Linux), Note: This article is from 2016 and only applies to Amazon Linux version 1.
update all packages – yum package manager
First, login to your new Amazon Linux EC2 instance and update all packages:
sudo yum update
Then if you are not going to use MTA (Mail Transfer Agent) you can Disable dispatch service,
sudo chkconfig sendmail off sudo service sendmail stop
Reduce the number of Getty services
edit /etc/sysconfig/init and change:
ACTIVE_CONSOLES=/dev/tty[1-6]
With…
ACTIVE_CONSOLES=/dev/tty[1-1]
Replace Azty with Minghetti
update! – AWS now installs Minghetti by default. In that case if the output of the install command is “already installed”, just change the line in /etc/init/serial.conf file as described below.
since agent heavy on RAM, come on replace with mingetti,
Install Mingetty first:
sudo yum install mingetty
Then edit /etc/init/serial.conf and change:
exec /sbin/agetty /dev/$DEV $SPEED vt100-nav
With
exec /sbin/mingetty /dev/$DEV $SPEED vt100-nav
Disable yum-updates and replace it with a simple cron job
update! – AWS no longer installs yum-updates by default. You can still set up cron if you want. Check to see if yum-updatesd is installed using this command in the list: chkconfig
This will save resident memory.
sudo chkconfig yum-updatesd off
either
sudo yum remove yum-updatesd
Next, make yum update cron instead. Add a new file /etc/cron.daily/yum.cron with the content:
#!/bin/sh /usr/bin/yum -R 120 -e 0 -d 0 -y update yum /usr/bin/yum -R 10 -e 0 -d 0 -y update
After:
sudo chmod +x /etc/cron.daily/yum.cron
Disable IPv6 Support
sudo chkconfig ip6tables off
Disable the Network Time Protocol (NTP) DEMO
next, disable ntpd, Run “top” and press shift+M, depending on memory usage, you’ll see ntpd is near the top of the list. This is used to keep your server’s clock in sync. You can replace with weekly cron so that you can disable the service and further reduce the memory usage.
sudo service ntpd stop sudo chkconfig ntpd off sudo chkconfog ntpdate off
Now add a new file named ntpdate-sync to the /etc/cron.weekly directory with the content:
#! /bin/sh /usr/sbin/ntpdate pool.ntp.org
After:
sudo chmod +x /etc/cron.weekly/ntpdate-sync
To run test:
sudo /etc/cron.weekly/ntpdate-sync
The output should be something like this:
11 Oct 22:57:49 ntpdate[1174]: adjust time server 97.107.134.213 offset -0.017816 sec
These are some basic steps to reduce the memory consumption of the first boot. Smaller Amazon Linux EC2 instances deserve more attention.
Swapping Amazon Linux EC2 and Tuning Cache Pressure
Another way to squeeze the most out of your Amazon Linux EC2’s limited RAM is by tuning the system’s propensity to swap and cache pressure (tendency to reclaim cache).
swappiness (Recommended value 10 to 60.0 if you have not added swap) – This control is used to define how aggressively the kernel will swap memory pages. Higher values will increase aggression, lower values will reduce swap volume. (default = 60)
vfs_cache_pressure (recommended value 50 to 200) , Controls the tendency of the kernel to reclaim memory used for caching directory and inode objects. (default = 100)
add these lines at the end /etc/sysctl.conf file.
vm.swapiness=10
vm.vfs_cache_pressure=200
Increasing caching pressure can be counterproductive to some extent because caching is good for performance. However, frequent swapping can also reduce the overall performance of your server. For example use this if free -m show says more than 60% of RAM is being used by cache/buffers… remember this is not a bad thing! However, depending on what is being cached you May Minimize memory usage/contention and gain performance by making adjustments as a result.
To check current values use these commands:
sudo cat /proc/sys/vm/swappiness sudo cat /proc/sys/vm/vfs_cache_pressure
Use the following command to enable these settings without rebooting:
sudo sysctl -w vm.swappiness=10 sudo sysctl -w vm.vfs_cache_pressure=200
How to Add Swap on Amazon Linux EC2?
Of course, on low-memory instances change is intelligent. For example to add a 1GB swap file, from the command line you would type:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
Now setup the swap file with the command:
sudo mkswap /swapfile sudo chmod 600 /swapfile
Now enable swap:
sudo swapon /swapfile
If you use the top command, you should now see 1GB of swap added. So now let’s make swap persistent so that it doesn’t get dropped when you reboot. edit /etc/fstab file and add this line as the last line:
/swapfile swap swap defaults 0 0
When you reboot, use free either df -h command to check for swap.
Remember, adding swap can help keep your server from running out of memory, but not if it’s already using (aka) a large chunk of swap. exchange), it is never good for performance. A lot can be extended regarding swap and paging/swapping. However, today the point is to take apart/tuning the AMI.
Note: This article was originally published on November 21, 2013. Updated to make sure suggested changes are still compatible.
See also: Strip down Apache to improve performance and memory efficiency
Leave a Comment