ver tengo saber revisar que procesos para memoria mas fisica estado consumen como comando chequear linux memory

tengo - Linux: no puede asignar más de 32 GB/64 GB de memoria en un solo proceso debido al límite de memoria virtual



ver memoria ram linux terminal (1)

Este es un problema de configuración de sistema y ulimit, no un problema de c ++.

Puedo ejecutar su código modificado adecuadamente en un tipo de instancia de Amazon EC2 r3.4xlarge sin problema. Estos cuestan menos de $ 0.20 / hora en el mercado spot, por lo que le sugiero que alquile uno, y tal vez eche un vistazo en / etc y compare su propia configuración ... o tal vez necesite recompilar un kernel de Linux para usar ese mucha memoria ... pero no es un problema de C ++ o gcc.

Ubuntu en la máquina EC2 ya estaba configurado para memoria de proceso ilimitada.

$ sudo su # ulimit -u --> unlimited

Este tiene 125GB de ram

# free total used free shared buffers cached Mem: 125903992 1371828 124532164 344 22156 502248 -/+ buffers/cache: 847424 125056568 Swap: 0 0 0

Modifiqué los límites de tu programa para subir a 149GB.

Aquí está la salida. Se ve bien hasta 118 GB.

root@ip-10-203-193-204:/home/ubuntu# ./memtest allocation of 1 x 25 GB of data. Ok? yes allocation of 1 x 26 GB of data. Ok? yes allocation of 1 x 27 GB of data. Ok? yes allocation of 1 x 28 GB of data. Ok? yes allocation of 1 x 29 GB of data. Ok? yes allocation of 1 x 30 GB of data. Ok? yes allocation of 1 x 31 GB of data. Ok? yes allocation of 1 x 32 GB of data. Ok? yes allocation of 1 x 33 GB of data. Ok? yes allocation of 1 x 34 GB of data. Ok? yes allocation of 1 x 35 GB of data. Ok? yes allocation of 1 x 36 GB of data. Ok? yes allocation of 1 x 37 GB of data. Ok? yes allocation of 1 x 38 GB of data. Ok? yes allocation of 1 x 39 GB of data. Ok? yes allocation of 1 x 40 GB of data. Ok? yes allocation of 1 x 41 GB of data. Ok? yes allocation of 1 x 42 GB of data. Ok? yes allocation of 1 x 43 GB of data. Ok? yes allocation of 1 x 44 GB of data. Ok? yes allocation of 1 x 45 GB of data. Ok? yes allocation of 1 x 46 GB of data. Ok? yes allocation of 1 x 47 GB of data. Ok? yes allocation of 1 x 48 GB of data. Ok? yes allocation of 1 x 49 GB of data. Ok? yes allocation of 1 x 50 GB of data. Ok? yes allocation of 1 x 51 GB of data. Ok? yes allocation of 1 x 52 GB of data. Ok? yes allocation of 1 x 53 GB of data. Ok? yes allocation of 1 x 54 GB of data. Ok? yes allocation of 1 x 55 GB of data. Ok? yes allocation of 1 x 56 GB of data. Ok? yes allocation of 1 x 57 GB of data. Ok? yes allocation of 1 x 58 GB of data. Ok? yes allocation of 1 x 59 GB of data. Ok? yes allocation of 1 x 60 GB of data. Ok? yes allocation of 1 x 61 GB of data. Ok? yes allocation of 1 x 62 GB of data. Ok? yes allocation of 1 x 63 GB of data. Ok? yes allocation of 1 x 64 GB of data. Ok? yes allocation of 1 x 65 GB of data. Ok? yes allocation of 1 x 66 GB of data. Ok? yes allocation of 1 x 67 GB of data. Ok? yes allocation of 1 x 68 GB of data. Ok? yes allocation of 1 x 69 GB of data. Ok? yes allocation of 1 x 70 GB of data. Ok? yes allocation of 1 x 71 GB of data. Ok? yes allocation of 1 x 72 GB of data. Ok? yes allocation of 1 x 73 GB of data. Ok? yes allocation of 1 x 74 GB of data. Ok? yes allocation of 1 x 75 GB of data. Ok? yes allocation of 1 x 76 GB of data. Ok? yes allocation of 1 x 77 GB of data. Ok? yes allocation of 1 x 78 GB of data. Ok? yes allocation of 1 x 79 GB of data. Ok? yes allocation of 1 x 80 GB of data. Ok? yes allocation of 1 x 81 GB of data. Ok? yes allocation of 1 x 82 GB of data. Ok? yes allocation of 1 x 83 GB of data. Ok? yes allocation of 1 x 84 GB of data. Ok? yes allocation of 1 x 85 GB of data. Ok? yes allocation of 1 x 86 GB of data. Ok? yes allocation of 1 x 87 GB of data. Ok? yes allocation of 1 x 88 GB of data. Ok? yes allocation of 1 x 89 GB of data. Ok? yes allocation of 1 x 90 GB of data. Ok? yes allocation of 1 x 91 GB of data. Ok? yes allocation of 1 x 92 GB of data. Ok? yes allocation of 1 x 93 GB of data. Ok? yes allocation of 1 x 94 GB of data. Ok? yes allocation of 1 x 95 GB of data. Ok? yes allocation of 1 x 96 GB of data. Ok? yes allocation of 1 x 97 GB of data. Ok? yes allocation of 1 x 98 GB of data. Ok? yes allocation of 1 x 99 GB of data. Ok? yes allocation of 1 x 100 GB of data. Ok? yes allocation of 1 x 101 GB of data. Ok? yes allocation of 1 x 102 GB of data. Ok? yes allocation of 1 x 103 GB of data. Ok? yes allocation of 1 x 104 GB of data. Ok? yes allocation of 1 x 105 GB of data. Ok? yes allocation of 1 x 106 GB of data. Ok? yes allocation of 1 x 107 GB of data. Ok? yes allocation of 1 x 108 GB of data. Ok? yes allocation of 1 x 109 GB of data. Ok? yes allocation of 1 x 110 GB of data. Ok? yes allocation of 1 x 111 GB of data. Ok? yes allocation of 1 x 112 GB of data. Ok? yes allocation of 1 x 113 GB of data. Ok? yes allocation of 1 x 114 GB of data. Ok? yes allocation of 1 x 115 GB of data. Ok? yes allocation of 1 x 116 GB of data. Ok? yes allocation of 1 x 117 GB of data. Ok? yes allocation of 1 x 118 GB of data. Ok? yes allocation of 1 x 119 GB of data. Ok? nope allocation of 1 x 120 GB of data. Ok? nope allocation of 1 x 121 GB of data. Ok? nope allocation of 1 x 122 GB of data. Ok? nope allocation of 1 x 123 GB of data. Ok? nope allocation of 1 x 124 GB of data. Ok? nope allocation of 1 x 125 GB of data. Ok? nope allocation of 1 x 126 GB of data. Ok? nope allocation of 1 x 127 GB of data. Ok? nope allocation of 1 x 128 GB of data. Ok? nope allocation of 1 x 129 GB of data. Ok? nope allocation of 1 x 130 GB of data. Ok? nope allocation of 1 x 131 GB of data. Ok? nope allocation of 1 x 132 GB of data. Ok? nope allocation of 1 x 133 GB of data. Ok? nope allocation of 1 x 134 GB of data. Ok? nope allocation of 1 x 135 GB of data. Ok? nope allocation of 1 x 136 GB of data. Ok? nope allocation of 1 x 137 GB of data. Ok? nope allocation of 1 x 138 GB of data. Ok? nope allocation of 1 x 139 GB of data. Ok? nope allocation of 1 x 140 GB of data. Ok? nope allocation of 1 x 141 GB of data. Ok? nope allocation of 1 x 142 GB of data. Ok? nope allocation of 1 x 143 GB of data. Ok? nope allocation of 1 x 144 GB of data. Ok? nope allocation of 1 x 145 GB of data. Ok? nope allocation of 1 x 146 GB of data. Ok? nope allocation of 1 x 147 GB of data. Ok? nope allocation of 1 x 148 GB of data. Ok? nope allocation of 1 x 149 GB of data. Ok? nope

Ahora, sobre esos US $ 0,17 que gasté en esto ...

Tengo una computadora con 128 GB de RAM, ejecutando Linux (3.19.5-200.fc21.x86_64). Sin embargo, no puedo asignar más de ~ 30 GB de RAM en un solo proceso. Más allá de esto, malloc falla:

#include <stdlib.h> #include <iostream> int main() { size_t gb_in_bytes = size_t(1)<<size_t(30); // 1 GB in bytes (2^30). // try to allocate 1 block of ''i'' GB. for (size_t i = 25; i < 35; ++ i) { size_t n = i * gb_in_bytes; void *p = ::malloc(n); std::cout << "allocation of 1 x " << (n/double(gb_in_bytes)) << " GB of data. Ok? " << ((p==0)? "nope" : "yes") << std::endl; ::free(p); } }

Esto produce el siguiente resultado:

/tmp> c++ mem_alloc.cpp && a.out allocation of 1 x 25 GB of data. Ok? yes allocation of 1 x 26 GB of data. Ok? yes allocation of 1 x 27 GB of data. Ok? yes allocation of 1 x 28 GB of data. Ok? yes allocation of 1 x 29 GB of data. Ok? yes allocation of 1 x 30 GB of data. Ok? yes allocation of 1 x 31 GB of data. Ok? nope allocation of 1 x 32 GB of data. Ok? nope allocation of 1 x 33 GB of data. Ok? nope allocation of 1 x 34 GB of data. Ok? nope

Busqué bastante tiempo y descubrí que esto está relacionado con el tamaño máximo de la memoria virtual:

~> ulimit -all [...] max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited virtual memory (kbytes, -v) 32505856 [...]

Puedo aumentar este límite a ~ 64 GB a través de ulimit -v 64000000 , pero no más. Más allá de esto, obtengo errores de operation not permitted :

~> ulimit -v 64000000 ~> ulimit -v 65000000 bash: ulimit: virtual memory: cannot modify limit: Operation not permitted ~> ulimit -v unlimited bash: ulimit: virtual memory: cannot modify limit: Operation not permitted

Algunas búsquedas más revelaron que, en principio, debería ser posible establecer estos límites a través de la entrada "as" (espacio de direcciones) en /etc/security/limits.conf . Sin embargo, al hacer esto, solo podía reducir la cantidad máxima de memoria virtual, no aumentarla .

¿Hay alguna manera de elevar este límite de memoria virtual por proceso por completo, o aumentarlo más allá de 64 GB? Me gustaría usar toda la memoria física en una sola aplicación.

EDITAR:

  • Después de Ingo Leonhardt, probé ulimits -v unlimited luego de iniciar sesión como root, no como usuario estándar. Al hacerlo, se resuelve el problema de root (el programa puede asignar toda la memoria física mientras está conectado como root). Pero esto funciona solo para root, no para otros usuarios. Sin embargo, al menos esto significa que, en principio, el kernel puede manejar esto muy bien, y que solo hay un problema de configuración.

  • En cuanto a limits.conf : intenté agregar explícitamente

    • difícil como ilimitado
    • suave como ilimitado

    a /etc/security/limits.conf , y reiniciando. Esto no tuvo efecto. Después de iniciar sesión como usuario estándar, ulimit -v aún devuelve alrededor de 32 GB, y ulimit -v 65000000 todavía dice que se permission denied (mientras que ulimit -v 64000000 funciona). El resto de limits.conf está comentado, y en /etc/security/limits.d solo hay otra entrada no relacionada (que limita nproc a 4096 para usuarios no root). Es decir, el límite de la memoria virtual debe provenir de otra parte que limits.conf sea limits.conf . ¿Alguna idea de qué más podría llevar a ulimits -v no ser "ilimitado"?

EDIT / RESOLUCIÓN:

  • Fue causado por mi propia estupidez. Tenía un programa (largamente olvidado) en mi configuración de usuario que utilizaba setrlimit para restringir la cantidad de memoria por proceso para evitar que Linux se canse hasta la muerte. Fue copiado involuntariamente de una máquina de 32 GB a la máquina de 128 GB. Gracias a Paul, Andrew Janke y a todos los demás por ayudarnos a rastrearlo. Lo siento a todos: /.

  • Si alguien más se encuentra con esto: ulimit/setrlimit en la configuración bash y de perfil, y los programas que potencialmente puedan invocar esos (suyos y los de todo el sistema / etc) y asegúrese de que /security/limits.conf no incluya esto límite ... (o al menos intente crear un nuevo usuario, para ver si esto sucede en su usuario o en la configuración del sistema)