liberar - limpiar linux
NFS comando de limpieza de caché? (5)
Tengo un problema con el almacenamiento en caché de atributos del lado del cliente NFS. Estoy usando algunos servidores, uno es un servidor NFS y los otros son servidores cliente NFS.
Todos los servidores son Debian (lenny, 2.6.26-2-amd64 de Linux) y las versiones siguientes.
% dpkg -l | grep nfs
ii libnfsidmap2 0.20-1 An nfs idmapping library
ii nfs-common 1:1.1.2-6lenny1 NFS support files common to client and server
ii nfs-kernel-server 1:1.1.2-6lenny1 support for NFS kernel server
En el servidor NFS, / etc / exports se escribe como sigue:
/export-path 192.168.0.0/255.255.255.0(async,rw,no_subtree_check)
En los clientes NFS, / etc / fstab se escribe de la siguiente manera:
server:/export-path /mountpoint nfs rw,hard,intr,rsize=8192,async 0 0
Como puede ver, la opción "asíncrono" se usa para el rendimiento de acceso de clientes múltiples. Sin embargo, a veces esto puede causar errores de almacenamiento en caché falso.
Como mantengo muchos servidores (y no tengo un permiso tan fuerte para cambiar las opciones de montaje), no quiero modificar / etc / exports ni / etc / fstab. Creo que es suficiente si tengo una herramienta de línea de comandos que "limpia" el caché de atributos del lado del cliente NFS con un permiso de usuario.
Por favor, hágamelo saber si hay tales órdenes.
Gracias,
(Adjunto)Me refiero a "errores de caché falso",
% ls -l /data/1/kabe/foo
ls: cannot access /data/1/kabe/foo: No such file or directory
% ssh another-server ''touch /data/1/kabe/foo''
% ls -l /data/1/kabe/foo
ls: cannot access /data/1/kabe/foo: No such file or directory
A veces tales casos ocurren. El problema no es el contenido del archivo, sino los atributos del archivo (= información de los centros), ya que NFS dice que garantiza la consistencia de Cerrar para Abrir.
AFAIK, las opciones de sync
y async
no son la fuente del almacenamiento en caché de atributos. Async
permite al servidor retrasar el almacenamiento de datos en el sistema de archivos del servidor, por ejemplo, afecta la durabilidad de la escritura en caso de fallas del servidor NFS, pero si el servidor NFS es estable, async
no afecta a los clientes NFS.
Existe una lookupcache=positive
NFS mount lookupcache=positive
que se puede usar para evitar el almacenamiento en caché de búsqueda negativa, por ejemplo, el NFS devuelve "No existe tal archivo o directorio" cuando el archivo realmente existe en el servidor. Ver Directory entry caching
en man nfs
.
Dentro de un proceso dado, llamar a opendir y closedir en el directorio principal de un archivo invalida el caché de NFS. Utilicé esto mientras programaba un planificador de trabajos. Muy, muy útil. ¡Intentalo!
Dependiendo de lo que quiere decir con "errores de caché falso", ejecutar sync
puede proporcionarle lo que necesita. Esto vaciará todos los buffers del sistema de archivos.
Si es necesario, también puede borrar los cachés de VM en el kernel utilizando /proc/sys/vm/drop_caches
.
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
Estás viendo los efectos de la caché de atributos de NFS. Ver man nfs
, y revisar DATA AND METADATA COHERENCE
.
De forma predeterminada, NFS almacena en caché los atributos durante un mínimo de 30 segundos ( acregmin
y acdirmin
) y un máximo de 60 segundos ( acregmax
y acdirmax
). Puede anular todo esto junto con actimeo
, o deshabilitar el caché de atributos completamente con noac
. Con la opción de montaje noac
, el comportamiento descrito por el OP desaparece, pero alcanza el rendimiento.
lookupcache=positive
es útil si solo busca la apariencia de nuevos archivos, pero las eliminaciones seguirán pasando por el caché de atributos.
borre el archivo / var / lib / nfs / rmtab en el servidor nfs.
Los siguientes comandos se utilizan para borrar problemas relacionados con la memoria. Y es muy peligroso también. Algunas veces se bloqueará tu aplicación alojada en la caja
# sync
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches