La plupart du temps où mon ordinateur commence à avoir besoin d'échange, je vois une pointe massive en usage de la CPU (kswapd0
utilise systématiquement 99% -100% de processeur). Selon top
, le temps est passé dans sy
(système/noyau) non wa
(io attendre).
Je suis en cours d'exécution Linux 4.0.4-2-Arch sur un C720 avec 2 Go de RAM et 6 Go Swap sur un SSD.
Je semble avoir ce problème avec ou sans supprimer les pages (la garniture) allumée.
Y a-t-il un paramètre que je devrais inspecter ou modifier si je peux résoudre ce problème?
Y a-t-il un moyen de déboguer le problème? Quelque chose comme strace
pour les fils de noyau?
En cours d'exécution avec Paramètres Linux d'ARCH par défaut:
/proc/sys/vm/swappiness
= 60
[.____] /proc/sys/vm/vfs_cache_pressure
= 100
[.____] /sys/kernel/mm/transparent_hugepage/enabled
= [always] madvise never
Il semble un relativementcommunproblème
Lorsque le problème se produit, pouvez-vous vérifier si la commande suivante l'arrête: echo 1 > /proc/sys/vm/drop_caches
Si cela fonctionne, vous pouvez le programmer comme un travail de cron périodique comme solution de contournement.
J'ai un noyau Linux en cours d'exécution C720 4.4.0 sur Ubuntu 14.04.1 LTS avec 2 gb RAM et 2 Go Swap.
En supposant une utilisation forte chromée/chrome, voici quelques façons de rendre votre système plus performant:
/etc/default/grub
et ajoutez les paramètres de noyau suivants au GRUB_CMDLINE_LINUX_DEFAULT
ligne:elevator=noop
zswap.enabled=1
transparent_hugepage=madvise
Sudo update-grub2
./etc/sysctl.conf
et appendez ce qui suit: vm.swappiness=25
# ~ max (res in top
) * 2/RAM = 500 MB/2 Go/2 Govm.vfs_cache_pressure=1000
# # plus sûr que de laisser tomber périodiquement des cachesVous pouvez vérifier les changements comme:
$ dmesg | grep -i noop
[ 0.694680] io scheduler noop registered (default)
$ dmesg | grep -i zswap
[ 0.724855] zswap: loaded using pool lzo/zbud
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
$ sysctl vm.swappiness
vm.swappiness = 25
$ sysctl vm.vfs_cache_pressure
vm.vfs_cache_pressure = 1000
Mise à jour
En augmentant vm.min_free_kbytes
À l'étape 3 peut être bénéfique. Essayez une valeur de 131072
(128 Mo). La finale à emporter est que Linux sur le bureau ne fonctionne pas très bien dans des situations de faible mémoire. Certains ont suggéré de placer chrome/chrome dans un cgroup
, mais qui dépasse la portée de cette réponse.
kSWAP Kernel servent à allouer et à libérer des pages de Momery, si votre échange est utilisé dans vous, voir ces fils de noyau utilisant tant de temps de processeur, qui diraient que les threads du noyau Kswap numérisent les pages de mémoire pour échanger certaines pages et servir la demande d'allocation de mémoire. .
Je pense que vous déposer le cache dans ce cas ne vous aide pas, car le noyau récupère le cache lorsque le système d'exploitation est une situation de mémoire serrée automatisée.
Si vous n'avez pas de problème de mémoire et utilisez la commande free
, vous serez tellement de mémoire utilisée comme cache, mais si vous avez un problème de mémoire, Linux réduit le cache pour servir les demandes d'allocation de mémoire, sans tout besoin de déposer le cache
vous pouvez utiliser sar -B
et rechercher majft
et pgscank
valeurs, pour d'autres valeurs man sar
( C'est quasi-réponse - trop longtemps pour être un commentaire, mais pas une réponse prête, cependant ))
1) Qu'en est-il de n'utiliser pas 6g, mais moins, disons 1 ou 2 gibs (vous pouvez configurer la taille avec mkswap
w/o séparez-vous Swap Swap) - essayé? Quels résultats?
2) quelle est sysctl vm.swappiness
, sysctl vm.vfs_cache_pressure
?
3) Qu'est-ce que cat /sys/kernel/mm/transparent_hugepage/enabled
?
N. B. Est-ce que vous réalisez-vous que vous allez porter votre SSD de manière significative dans ce type de configuration (pas que beaucoup de bélier, d'énorme swap).
P. S. Je pourrais vous recommander d'essayer d'utiliser ultraksm, mais il nécessite de corriger un noyau. J'ai des constructions de miennes propres ( - réeltime et [~ # ~ # ~] bfs [~ # ~] Basé), mais ils sont pour .deb
- Systèmes basés sur des systèmes et ils peuvent être utilisés sur différents systèmes assez facilement (généralement vous auriez besoin de déballer le .deb
s et faire correspondant initrd/initramfs, il peut s'agir d'un tracas pour les personnes qui ne sont pas si familières de ce côté de Linux)
(à suivre)
Si vous avez un service en cours d'exécution à l'intérieur de Docker comme Puppeteer (API Chrome Headless) à l'intérieur de votre DockerFile, ajoutez le Dumb-Init .
Si vous utilisez Docker> = 1.13.0 Utilisez Docker Run's --Ilit Arg pour récolter des processus zombies
docker run container --init
Si vous exécutez un <= 1.13.0 dans Docker, utilisez Dumb-Init. Ajoutez ceci à votre dockerfile.
ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_AMD64
/usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init
ENTRYPOINT ["dumb-init", "--"]