Google Mobile Services (GMS) is the single largest RAM consumer on the Moto E2 — 270 MB across multiple processes (com.google.android.gms, com.google.android.gms.persistent, com.google.process.gfirst). When RAM optimization started, killing GMS seemed like the obvious biggest win.
The first kill attempt freed 270 MB instantly — then all internet connectivity died. No DNS, no HTTP, no ping. Even though the phone still had a WiFi IP address.
The issue is that on Android 6, GMS manages the DHCP client that populates the routing table. When GMS dies, the default route in routing table 1030 is removed:
# Before killing GMS:
ip route show table 1030
# default via 192.168.1.254 dev wlan0 proto dhcp
# After am force-stop com.google.android.gms:
ip route show table 1030
# (empty — no default route)
# Result:
ping 8.8.8.8
# Network is unreachableThe phone retains its IP address (wpa_supplicant handles WiFi association independently) but has no route to the internet. The route is proto dhcp — managed by GMS's DHCP client.
The workaround: Configure a static IP on the router's DHCP reservation, then the route becomes proto static and survives GMS death. This is documented in Hack #25. However, GMS respawns within 2 minutes anyway (Android's service restart policy), so the RAM savings are temporary.
# Check routing table BEFORE any GMS operations:
ip route show table 1030
# Expected: default via 192.168.1.254 dev wlan0
# Check GMS is running:
ps | grep gms
# Expected: multiple GMS processes
# NEVER run this without reading Hack #25 first:
# am force-stop com.google.android.gms # BREAKS INTERNETcom.google.android.gsf (Google Services Framework) is also dangerous to kill — it manages GMS and other Google integrations| Metric | Before | After |
|---|---|---|
| RAM freed | 0 | 270 MB (temporary) |
| Internet | Working | BROKEN |
| Recovery | N/A | Reboot or WiFi toggle |
| Lesson learned | N/A | GMS = DHCP = routing |