Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Valor de MB muito grande

Estou com um problem nos meus arquivos de log que eu gero. Uso o fedora como o meu sitema Linux. O modo qual o federa mostra o tamanho dos processos é diferente a do ubuntu? Esse é o codigo:

#!/bin/bash

process_0(){

        cd ~/ShellScript    
        if [ ! -d log ] ; then
        mkdir log                
        fi

        PROCESS=$(ps -e -o pid --sort -size | head -n 11 | grep [0-9])
            for pid in $PROCESS ; do
            PROCESS_0=$(ps -p $pid -o comm=)
            echo -n $(date +%F,%H:%M:%S,) >> log/$PROCESS_0.log
             PROCESS_1=$(ps -p $pid -o size | grep [0-9])
            echo -n "$(bc <<< "scale=2;$PROCESS_1/1024")MB" >> log/$PROCESS_0.log
            echo $PROCESS_0 >> log/$PROCESS_0.log
        done
    }

process_0

if [ $? -eq 0 ] ; then

echo "Sucesso"

else

echo "Falha"

fi

Está imprimindo um valor muito grande quase 65 gigas

2018-07-03,21:56:38,  65621.15MB

Esse é o valor que o meu terminal retorna

###java --- 85577160###
###WebKitNetworkPr --- 83990644###
###evolution-calen --- 83989840###
###evolution-addre --- 83964944###
###evolution-alarm --- 83960436###
###gnome-shell-cal --- 83948984###
###evolution-addre --- 83947960###
###WebKitWebProces --- 67233940###
###evolution-sourc --- 67180152###
###evolution-calen --- 67170808###
2 respostas

Olá, Paulo.

Rodei aqui no meu Ubuntu 14.04 o seguinte comando, para mostrar o processo de maior size:

ps -e -o pid,comm,size --sort -size | head -n 2

O resultado foi:

  PID COMMAND          SIZE
 3920 dropbox         2777256

Se eu fizer como no script e dividir por 1024

echo "$(bc <<< "scale=2;2777256/1024") MB"

terei como resultado

2712.16 MB

Ou seja, 2.6 GB!

Há algo de errado mesmo!

solução!

Se olharmos no man ps temos:

size SZ approximate amount of swap space that would be required if the process were to dirty all writable pages and then be swapped out. This number is very rough!

O size trata de tamanho do possível swap.

Temos também o rssize:

rss RSS resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz).

Ou seja, o Resident Set Size é a memória física realmente utilizada pelo processo.

Incluindo o rssize no meu comando:

ps -e -o pid,comm,size,rssize --sort -size | head -n 2

temos o resultado

  PID COMMAND          SIZE   RSS
 3920 dropbox         2777256 157932

Se executarmos o bc com o valor do rssize:

echo "$(bc <<< "scale=2;157932/1024") MB"

teremos

154.23 MB

Faz muito mais sentido, não!?