Solución 1:
Puede obtener el uso máximo de memoria de un determinado proceso en:
grep VmPeak /proc/$PID/status
(Cambie $PID a la identificación del proceso real que está buscando).
VmPeak es la cantidad máxima de memoria que ha utilizado el proceso desde que se inició.
Para rastrear el uso de la memoria de un proceso a lo largo del tiempo, puede usar una herramienta llamada munin para rastrear y mostrarle un gráfico agradable del uso de la memoria a lo largo del tiempo.
Munin viene con muchos complementos predeterminados para rastrear los recursos del sistema, sin embargo, no viene con un complemento para rastrear el uso máximo de memoria; afortunadamente, es extremadamente fácil escribir un complemento para él.
Aquí hay un ejemplo de un complemento munin para rastrear el uso de memoria VmPeak, VmRSS y VmSize, para el proceso de apache. Puede cambiar esto para adaptarlo a sus necesidades (simplemente señale el archivo PID correcto y cambie el nombre del componente según sea necesario).
El gráfico que genera se ve así (VmPeak y VmSize son iguales en este ejemplo, por lo que solo verá uno de ellos):
#!/bin/bash
#
# Parameters:
#
# config (required)
# autoconf (optional - used by munin-config)
#
COMPONENT_NAME="Apache"
COMPONENT_PID_FILE="/var/run/apache2.pid"
if [ "$1" = "autoconf" ]; then
if [ -r /proc/stat ]; then
echo yes
exit 0
else
echo "no (/proc/stat not readable)"
exit 1
fi
fi
if [ "$1" = "config" ]; then
echo "graph_title $COMPONENT_NAME memory usage"
echo 'graph_vlabel'
echo "graph_category Processes"
echo "graph_info This graph shows the amount of memory used by the $COMPONENT_NAME processes"
echo "${COMPONENT_NAME}_vmpeak.label $COMPONENT_NAME VmPeak"
echo "${COMPONENT_NAME}_vmsize.label $COMPONENT_NAME VmSize"
echo "${COMPONENT_NAME}_vmrss.label $COMPONENT_NAME VmRSS"
echo 'graph_args --base 1024'
exit 0
fi
check_memory ()
# $1 - PID location
# $2 - process_label
{
pid_location=$1
process_label=$2
read pid < $pid_location
procpath="/proc/$pid/status"
if [ ! -e $procpath ] || [ -z $pid ]
then
echo "${process_label}_vmpeak.value 0"
echo "${process_label}_vmsize.value 0"
echo "${process_label}_vmrss.value 0"
exit 0
fi
VmPeak=`grep VmPeak /proc/$pid/status|awk '{print $2}'`
VmSize=`grep VmSize /proc/$pid/status|awk '{print $2}'`
VmRSS=`grep VmRSS /proc/$pid/status|awk '{print $2}'`
echo "${process_label}_vmpeak.value $(( $VmPeak * 1024 ))"
echo "${process_label}_vmsize.value $(( $VmSize * 1024 ))"
echo "${process_label}_vmrss.value $(( $VmRSS * 1024 ))"
}
check_memory $COMPONENT_PID_FILE $COMPONENT_NAME
Solución 2:
Hay herramientas que puede usar al iniciar un proceso que le brindan un resumen del uso de la memoria una vez que finaliza el proceso:
- tiempo de memoria
- hora
Tiempo de GNU también proporciona el uso máximo de memoria cuando se ejecuta con la opción -v. Tenga en cuenta que bash también tiene un comando incorporado llamado tiempo, por lo que es posible que deba especificar la ruta completa al tiempo de GNU cuando lo invoque, por ejemplo, /usr/bin/time -v comando . Además, tenga en cuenta que las versiones anteriores de GNU time tienen un error en el que los resultados se multiplican incorrectamente por 4, por ejemplo, consulte el siguiente enlace:https://bugzilla.redhat.com/show_bug.cgi?id=702826