Sistema: teléfono Android 4.4 rooteado (ROM real: CM 11 Milestone 6) con 1 GB de RAM, mucho espacio de almacenamiento interno, pero sin ranura para tarjeta SD. El esquema de partición de mi teléfono es CyanogenMod 11 sin modificar.
Problema: el controlador lowmemorykiller/OOM en mi teléfono sigue eliminando procesos vitales del sistema, como la pantalla de bloqueo, incallui o acore, lo que provoca, en el mejor de los casos, bloqueos prolongados y, con mayor frecuencia, bloqueos del sistema suaves y duros. Probablemente estoy ejecutando aplicaciones que empujan la memoria RAM más allá del mínimo del sistema, y está haciendo una elección subóptima de proceso en segundo plano para eliminar. Busqué afinar lowmemkiller pero no llegué a ninguna parte.
Como el problema es la RAM y no la CPU, quiero intentar habilitar el intercambio basado en el almacenamiento interno en lugar de zRAM como una solución alternativa, que el teléfono debería manejar. Pero no puedo encontrar instrucciones claras sobre cómo hacerlo. Cada página de instrucciones que encontré es de escritorio, no específica de Android, específica de almacenamiento externo (tarjeta SD) ("partición que usa USB + Windows"), asume que desea un intercambio basado en archivo, no en partición, o sugiere una aplicación de Google Play para usar. Ninguno explica paso a paso cómo hacerlo.
Suponiendo que he leído las advertencias y conozco los riesgos, y quiero seguir adelante de todos modos, ¿cómo lo hago? Realmente solo quiero obtener una lista de los comandos de consola de ejemplo para usar el intercambio basado en particiones. Supongo que va algo como esto:
Mi nivel actual de experiencia *nix: Sé que Linux usa particiones y subparticiones, que las nuevas particiones y los cambios de partición probablemente necesiten que edite manualmente fstab u otros archivos, y que también se necesiten ediciones manuales para garantizar que las particiones se montarán/habilitarán/utilizarán en bota. No he usado los comandos reales ni he cambiado los archivos reales, así que no sé qué esperar. Me siento cómodo con la consola, pero esta es un área un poco nueva para mí.
¿Cómo hago esto, paso a paso, y cuáles son los comandos que usaría si no son obvios? Puedo calcular el resto de eso.
Solo una idea en bruto, no probada / verificada por mí mismo:
El intercambio también se puede establecer mediante un archivo de intercambio, por lo que podría probar fácilmente si funciona. Pruebe a través adb shell
de o una aplicación de terminal, después de convertirse en root, si los comandos , y están dd
disponibles mkswap
. swapon
Si es así, puedes probar:
# create a file to be used for swapping
# (adjust the filename to where the file should reside, and the count
# to the size in kb it should occupy)
dd if=/dev/zero of=</path/to/swapfile> bs=1024 count=65536
# initialize the file for swap use
# (use the file created in the previous step)
mkswap </path/to/swapfile>
# enable swapping
swapon </path/to/swapfile>
# to disable swapping to that file:
# swapoff </path/to/swapfile>
Hay formas de ajustar esto (por ejemplo, establecer valores específicos para swappiness ), pero con los pasos descritos puede probar fácilmente si funciona, sin gran peligro de romper cosas. Ni siquiera es necesario reiniciar. En el mejor de los casos, simplemente funciona; en el peor de los casos, no funciona, y es posible que deba eliminar manualmente el </path/to/swapfile>
;)
Yo estaba teniendo el mismo problema. Intenté 4 aplicaciones, todas fallaron. Sé cómo hacer esto en otras distribuciones de Linux, que también se muestran manualmente arriba, aún fallaron. Probé otras ideas dadas anteriormente: moverse a otros puntos de montaje. La mayoría te son negados, otros son demasiado pequeños para que valga la pena.
Luego se dio cuenta al correrdf
Vi una salida como esta:
/storage/sdcard0
/mnt/media_rw/sdcard0
Usar el /mnt
en lugar de /storage
o /sdcard
parece haberme permitido habilitar el intercambio con éxito.
estilo
"swapon failed for /path/and/file"
). Sin opción detallada para swapon, 3 GB de repuesto; No pude ver cómo aprender cuál era el problema.izzy
-if/-of
(arreglado). ¿Con qué tamaño de archivo has probado? ¿En qué almacenamiento se encuentra el archivo de intercambio (por ejemplo, una tarjeta externa o interna)?izzy
estilo
estilo
free
aumentó a (128MB zRAM
+ la cantidad de KB que designéswap.file
). No he probado si se conserva al reiniciar, pero los comandos anteriores parecen funcionar. Entonces parece que depende de la ruta. Entonces, la siguiente pregunta es... ¿cómo configuro un archivo/partición contiguo para el intercambio y dónde colocar un archivo o cómo modificar la partición? La/cache
partición es demasiado pequeña para un intercambio de 400 MB. Además, me gustaría tenerlo en un lugar más "visible", si Android lo permite.estilo
izzy
swapon
comando después de cada arranque (no es necesario repetir los otros pasos). En cuanto a la ubicación, podrías probar/data/local
.estilo
/data/local
parece funcionar bien como ubicación. ¿Android tiene una forma estándar (nativa) de definir un archivo de intercambio o una partición de forma permanente o, de no ser así, ejecutar un script en el momento del arranque para definirlo? Me gustaría usar métodos nativos si es posible, yo mismo, en lugar de descargar "aún más aplicaciones" que normalmente solo empaquetan métodos nativos de todos modos :) [Y es posible que desee editar la respuesta original nuevamente, dejó el "-" antes de if=/of =]izzy
JepZ
swapon </path/to/swapfile>
no funcionó para mí, pero envolver el archivo con un dispositivo de bucle funcionó:losetup /dev/block/loop0 </path/to/swapfile>; swapon /dev/block/loop0