El intercambio utilizado no es malo, pero hay mucha actividad de intercambio
vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
6 0 521040 114564 6688 377308 8 13 639 173 0 1100 5 4 90 0
1 0 521040 114964 6688 377448 0 0 256 0 0 1826 3 4 94 0
0 0 521040 115956 6688 377448 0 0 0 0 0 1182 7 3 90 0
0 0 521036 115992 6688 377448 4 0 16 0 0 1154 10 2 88 0
3 0 521036 114628 6696 377640 0 0 928 224 0 1503 15 17 67 1
El intercambio de columnas no es un problema en absoluto. Los valores distintos de cero en las columnas si y so son mortales para el rendimiento del servidor. Especialmente los que tienen mucha RAM.
Es mejor deshabilitar el intercambio en máquinas con varios GB de RAM:
sysctl -w vm.swappiness=0
Esto no deshabilitará el intercambio. Solo le indicará a Linux que use el intercambio como medida de último recurso. Esto desperdiciará unos pocos MB de programas que no necesitan estar en la RAM ... Pero es preferible intercambiar las colas de acceso al disco.
Edición 1: por qué el valor predeterminado de intercambio no es óptimo
Recordemos hace dos décadas que un gran 486 tenía solo 32Mb de RAM. Los algoritmos de intercambio se desarrollaron cuando toda la RAM se podía mover al disco en una pequeña fracción de segundo. Incluso con los discos más lentos de esa época. Es por eso que las políticas de intercambio predeterminadas son tan agresivas. RAM fue el cuello de botella en esos días. Desde entonces, el tamaño de RAM aumentó más de 10,000 veces y las velocidades de disco menos de 10 veces. Esto cambió el cuello de botella al ancho de banda del disco.
Edición 2: ¿por qué si la actividad es mortal para los servidores?
Si y así, la actividad en máquinas con toneladas de RAM es mortal porque significa que el sistema está luchando consigo mismo por la RAM. Lo que sucede es que los discos, incluso los grandes almacenes son demasiado lentos en comparación con las RAM. El intercambio agresivo favorece la memoria caché del disco del núcleo sobre los datos de la aplicación y es la fuente más común de lucha por la RAM. Dado que el sistema operativo tendrá que liberar el caché de disco en cada si , el tiempo de vida del caché adicional que proporciona el intercambio es demasiado bajo para ser útil de todos modos. El resultado es que está tomando el ancho de banda del disco para almacenar la memoria caché que probablemente no se usará y pausando sus programas esperando las páginas si . Lo que significa que consume muchos recursos críticos con poco o ningún beneficio para las aplicaciones.
Tenga en cuenta el título de la respuesta "mucha actividad de intercambio en servidores con mucha RAM". Esto no se aplica a máquinas con actividad ocasional. Esto puede no aplicarse en el futuro si se desarrollan algoritmos de intercambio más inteligentes en los sistemas operativos.
Edición 3: páginas "frías"
La gente idealiza el algoritmo de intercambio. Algunos dicen "se necesitan páginas menos usadas de la RAM", pero esto no es lo que hace el núcleo. Lo que es difícil de entender sobre el intercambio es que el núcleo no sabe qué es una "página en frío". El núcleo no tiene una buena métrica para determinar si la página se usa o es probable que se use en el futuro cercano. Para evitar que el kernel ponga páginas en el intercambio más o menos al azar y las páginas que no son necesarias se quedan allí. El problema de ese algoritmo es que las páginas deben ir al intercambio para saber si las aplicaciones las necesitan. Y esto significa que muchas páginas "populares" irán al intercambio. El problema es que los discos son demasiado lentos en comparación con la RAM.
Construí mi propio punto de referencia que es un escenario realista muy común para muchas aplicaciones con un volumen decente. De mis pruebas, no vi beneficios en el rendimiento o la latencia cuando se usan swaps. Lejos de ahi. Cuando comienza el intercambio, ralentiza tanto el rendimiento como la latencia al menos en un orden de magnitud.
Voy un poco más al respecto: entiendo que el intercambio no es para procesar. Los swaps son solo para emergencias. Esos momentos en los que se ejecutan demasiadas aplicaciones al mismo tiempo y obtienes un pico de memoria. Sin intercambio, esto causaría errores de falta de memoria. Considero que el uso de intercambio es un fracaso de los equipos de desarrollo y producción. Esta es solo una opinión que va mucho más allá de lo que discutimos aquí, pero es lo que creo. Por supuesto, mis aplicaciones tienen una excelente administración de memoria por sí mismas.