Red de conocimiento informático - Aprendizaje de programación - comando de memoria del monitor de Linux memoria del monitor de Linux

comando de memoria del monitor de Linux memoria del monitor de Linux

¿Cuál es el comando para ver la memoria en Linux?

El comando superior muestra la memoria del sistema. La herramienta especializada actualmente más utilizada para ver el contenido de la memoria en Linux es el comando gratuito. La siguiente es una explicación del resultado del comando de vista de memoria libre:

total: tamaño total de la memoria física.

Usado: Cuánto se ha usado.

gratis: Cuántos hay disponibles.

Compartida: La cantidad total de memoria utilizada por múltiples procesos ****.

Buffers/cached: El tamaño de la caché del disco. Para familiarizarse con los comandos básicos de Linux, consulte el libro Aprenda Linux de esta manera.

¿Cómo detectar pérdidas de memoria en Linux?

Para detectar pérdidas de memoria, el proceso de asignación y liberación de memoria en el programa debe registrarse sobrecargando todas las formas de operatornew y operatorordelete, e interceptando la información de operación de la memoria al ejecutar newoperator y deleteoperator. El siguiente es el formulario sobrecargado

void*operatornew(size_tnSize, char*pszFileName, intnLineNum)

void*operatornew(size_tnSize, char*pszFileName, intnLineNum)

void*operatornew(size_tnSize,

void*operatornew(size_tnSize, char*pszFileName, intnLineNum) intnLineNum)

voidoperatordelete(void*ptr)

voidoperatordelete( void*ptr)

Definimos una nueva versión de operatornew Además de los parámetros size_tnSize necesarios, también agregamos el nombre del archivo y el número de línea, es decir, el nombre del archivo y el número de línea del archivo. llama al operador newoperator. Esta información se generará cuando se detecte una pérdida de memoria para ayudar a los usuarios a localizar la ubicación de la fuga. Para operatordelete, dado que no hay forma de definir una nueva versión, anulamos directamente las dos versiones de operatordelete global.

En la versión sobrecargada de la función operatornew, llamamos a la versión correspondiente del operador global new y pasamos el parámetro size_t correspondiente, y luego registramos el valor del puntero devuelto por el operador global new en el mapeo STL, como así como el nombre del archivo asignado y el número de línea. La estructura de datos utilizada aquí es un mapa STL con valores de puntero como claves. Al llamar al operatorordelete, si el método de llamada es correcto (el método de llamada incorrecto se describirá en detalle más adelante), podemos encontrar el elemento de datos correspondiente con el valor del puntero pasado como valor clave en el mapa y eliminarlo, y luego llamar libre de soltar el puntero. El bloque de memoria señalado. Cuando el programa sale, los elementos de datos restantes en el mapa son las pérdidas de memoria que queremos detectar: ​​memoria que se ha asignado en el montón pero que aún no se ha liberado.

Lo anterior es el principio básico de la implementación de la detección de memoria, pero hay dos problemas básicos que aún no se han resuelto:

1) ¿Cómo obtenemos el nombre del archivo y el número de línea? del archivo donde se encuentra el código de asignación de memoria y dejar que newoperator se lo pase a nuestro operador sobrecargado new.

2) Cuándo creamos la estructura de datos del mapa, cómo administramos la estructura y cuándo imprimimos la información de pérdida de memoria.

Primero, podemos resolver el problema número 1.

Primero, podemos aprovechar las macros precompiladas de C __FILE__ y __LINE__, que se expandirán en el momento de la compilación al nombre del archivo y al número de línea de la línea en la posición especificada. Luego necesitamos reemplazar el nuevo operador global predeterminado con una versión personalizada capaz de pasar nombres de archivos y números de línea, que definimos en el archivo de encabezado del subsistema MemRecord.h:

#defineDEBUG_NEWnew(__FILE___, __LINE__)

Luego, en todos los archivos requeridos

#include "MemRecord.h"

#definenewDEBUG_NEW

y agréguelo al requerido El comienzo de todos los archivos cpp de todos los programas cliente para la detección de memoria

La llamada al nuevo operador global predeterminado en el archivo fuente del cliente se puede reemplazar con new(__FILE__, __LINE__)

. FILE__, __LINE__), esta forma de newoperator llamará a nuestro operador new(size_tnSize, char*pszFileName, intnLineNum), donde nSize es calculado y pasado por newoperator, y el nuevo punto de llamada del nombre de archivo y número de línea está determinado por Se aprobó nuestra versión personalizada de nuevo operador. Recomendamos incluir la macro anterior en todos los archivos de código fuente del usuario; si algunos archivos usan el subsistema de detección de memoria y otros no, lo más probable es que el subsistema genere algunas advertencias de fugas debido a la incapacidad de monitorear todo el sistema.

Luego viene la segunda pregunta. El mapeo que utilizamos para administrar la información del cliente debe crearse antes de la primera llamada de newoperator o deleteoperator por parte del programa cliente, y la impresión de la información filtrada debe realizarse después de la última llamada de newoperator y deleteoperator, es decir, debe nacer. antes del programa cliente y analizarlo después de que salga el programa cliente. De hecho, hay una persona que puede cubrir el ciclo de vida del programa cliente, y ese es el objeto global (appMemory). Podemos diseñar una clase para encapsular el mapeo y sus operaciones de inserción y eliminación, luego construir el objeto global de la clase (appMemory), crear e inicializar la estructura de datos en el constructor del objeto global (appMemory) y analizarlo en su destructor. y los datos restantes en la estructura de datos de salida. Llame a la interfaz de inserción del objeto global (appMemory) para registrar el puntero, el nombre del archivo, el número de línea, el tamaño del bloque de memoria y otra información en el mapa con el valor del puntero como clave, y llame a la interfaz de borrado para eliminar la asignación y el puntero. en operatorordelete El elemento de datos correspondiente al valor, tenga cuidado de no olvidar que el acceso al mapa debe sincronizarse con el mutex, porque puede haber varios subprocesos realizando operaciones de memoria en el montón al mismo tiempo.

Bien, los conceptos básicos de las pruebas de memoria están en su lugar. Pero no olvide que para detectar pérdidas de memoria, agregamos una capa de indirección en el operador global y, para garantizar un acceso seguro a la estructura de datos, agregamos mutex, todo lo cual reducirá la eficiencia del programa. Por lo tanto, debemos facilitar a los usuarios habilitar o deshabilitar esta función de detección de memoria. Después de todo, la detección de fugas de memoria debe realizarse durante la fase de depuración y prueba del programa.

Podemos usar la función de compilación condicional y usar la siguiente definición de macro en el archivo de detección del usuario:

#include "MemRecord.h"

#ifdefinido(MEM_DEBUG)

#definenewDEBUG_NEW

#endif

Cuando los usuarios necesitan usar la función de detección de memoria, pueden usar el siguiente comando para compilar el archivo a detectar

g -c-DMEM_DEBUGxxxxxx .cpp

puede habilitar la función de detección de memoria Cuando el programa del usuario se lanza oficialmente, el usuario puede eliminar el interruptor de compilación -DMEM_DEBUG para deshabilitar la función de detección de memoria, eliminando así la detección de memoria. función.

¿Cómo divide Linux la memoria restante en directorios de datos?

No se puede asignar memoria al directorio de datos porque el sistema Linux la asigna automáticamente.

¿Cómo utilizar nmon para monitorear el rendimiento y analizar los datos de rendimiento del sistema en Linux?

nmonanalyser

Este es un formulario que implementa funciones integradas de procesamiento y análisis a través de macros de Excel

Pasos:

Monitoreo de la generación de datos , a través de La línea de comando nmon se genera en el lado del servidor

La descarga de datos se completa a través de ftp, scp y otras herramientas

La importación de datos se completa a través de tablas de Excel

Análisis de datos, macroreunión Le ayuda a implementar análisis de datos y generar informes de datos

En general, nmon es muy bueno y los informes son muy naturales y hermosos, al menos mejores que lo que la mayoría de la gente hace manualmente

Vale la pena recomendar herramientas.

Análisis de rendimiento

De hecho, el informe por sí solo no puede considerarse un análisis. El análisis real lo completa el cerebro humano.

Por ejemplo: uso elevado de CPU. no es alto? Si el uso de la CPU es alto, si es normal, si el IO es normal, el ancho de banda de la red, el uso de la memoria, el tamaño del caché, etc. . . . . .

Basándonos en un conocimiento profundo del sistema operativo y del software de la aplicación, podemos analizar realmente si hay espacio para la optimización, si los datos son normales, etc.

¿Cuánta memoria utiliza una cámara 4G al día?

El espacio de almacenamiento requerido para un día de trabajo de la cámara web depende de los siguientes factores:

La resolución de la cámara, como 720P, 960P, 1080P, etc.; formato, como: JPEG, MJPEG, MJPEG-4, H.264; la tasa de bits de la imagen, la velocidad de cuadros y otros factores, dependiendo de la resolución de la cámara y el tiempo máximo que requiere almacenamiento la grabación de video;

Actualmente, la memoria utilizada por las cámaras convencionales en el mercado en un día es la siguiente:

1. El flujo de código de una cámara de red de alta definición de 720p es de 3 Mbps, lo que requiere hasta aproximadamente 1,32 GB de espacio de almacenamiento por hora. Aproximadamente 31,68 GB por día.

2. La velocidad de bits de la cámara web HD de 960p es de 4 Mbps, lo que ocupa aproximadamente 1,79 GB de espacio de almacenamiento por hora y aproximadamente 31,68 GB por día. 1,79 GB, que son aproximadamente 42,96 GB por día.

3. Una cámara web HD de 1080p tiene una velocidad de bits de 5 Mbps y ocupa aproximadamente 2,25 GB de almacenamiento por hora, lo que equivale a unos 54 GB por día.

Información ampliada: Parámetros básicos de la cámara de red:

Procesador de microordenador Procesador integrado RSICE de 32 bits

Sistema operativo Sistema Linux integrado

Compresión de vídeo Modo Movimiento -JPEG

Sistema de señal PAL o NTSC

Velocidad de fotogramas --gt; 25 fps

Resolución PAL: VGA (640*480), SIF (320*240) ), QSIF(160*120)

Interfaz de red RJ45, 10

Interfaz de red RJ45, interfaz Ethernet adaptable de 10/100 m compatible con protocolos de red TCP/IP, HTTP, ICMP, DHCP, FTP, SMTP, PPPoE, etc. Dirección IP de soporte: dirección IP estática, dirección IP dinámica.