Cómo saber quién está cambiando el proceso en Linux

  

Cuando estamos haciendo un servidor Linux, a menudo necesitamos saber quién está haciendo el cambio de proceso y cuál es la razón del cambio de proceso. Debido al alto costo del cambio de proceso, le doy un número que LMbench prueba:

Cambio de contexto - tiempos en microsegundos - más pequeño es mejor

—————————— ——————————————-

Host OS 2p /0K 2p /16K 2p /64K 8p /16K 8p /64K 16p /16K 16p /64K

Ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw

——— ——————————————————————————

my174.cm4 Linux 2.6.18 - 6.1100 7.0200 6.1100 8.7400 7.7200 8.96000 9.62000

En mi servidor de gama alta, la sobrecarga del proceso de conmutación es de alrededor de 8us. Esto es inaceptable en comparación con los servidores de alto rendimiento, por lo que tenemos que estar en un intervalo de tiempo. Haga todo lo posible dentro del trabajo, en lugar de perder tiempo en cambios innecesarios.

Curioso por matar al gato, investiguemos quién está cambiando nuestro proceso: ¿

ver sourceprint? [root @ my174 admin] # dstat 1

---- Uso total de la CPU ----- dsk /total- -net /total- --- paginación-- --- sistema--

usr sys idl wai hiq siq |  Leer escrito |  Recv enviar |   Fuera de  Int csw

0 0 100 0 0 0 |    0 0 |  796B 1488B |    0 0 | 1004 128

0 0 100 0 0 0 |    0 0 |  280B 728B |    0 0 | 1005 114

0 0 100 0 0 0 |    0 0 |  280B 728B |    0 0 | 1005 128

0 0 100 0 0 0 |    0 0 |  280B 728B |    0 0 | 1005 114

0 0 100 0 0 0 |    0 320k |  280B 728B |    0 0 | 1008 143

...

Podemos ver que el número de csw es 120 /S, pero herramientas como dstat o vmstat no nos dicen quién está haciendo cosas malas. Ok Hagámoslo nosotros mismos.

¡Ofreciendo nuestro encantador systemtap!

¿Ver la fuente? [root @ my174 admin] # cat > cswmon.stp

#! /usr /bin /env stap

#

#

global csw_count

global idle_count

probe scheduler.cpu_off {

csw_count [task_prev , task_next] ++

idle_count + = idle

}

fmt_task función (task_prev, task_next)

{

return sprintf ( "% s (% d) - >% s (% d)",

task_execname (task_prev),

task_pid (task_prev),

task_execname (task_next) ,

task_pid (task_next))

}

function print_cswtop () {

printf ("% 45s% 10s \\ n", "Interruptor de contexto "," COUNT ")

foreach ([task_prev, task_next] en csw_count- limit 20) {

printf ("% 45s% 10d \\ n ", fmt_task (task_prev, task_next), Csw_count [task_prev, task_next])

}

printf ("% 45s% 10d \\ n", "idle", idle_count)

delete csw_count

eliminar idle_count

}

probador timer.s ({GetProperty (Content)}) {

print_cswtop ()

printf ("- -------------------------------------------------- ----------- \\ n ")

}

CTRL + D

Este script imprimirá el TOP 20 cada vez que se establezca. Cambiando la mayoría de los procesos y su pid, veamos los resultados: ¿

ver sourceprint? [Root @ my174 admin] # stap cswmon.stp 5

Contexto COUNT

swapper (0) - > systemtap /11 (908) 500

systemtap /11 (908) - > swapper (0) 498

swapper (0) - > fct1 trabajador (2492) 50

fct1-worker (2492) - > swapper (0) 50

swapper (0) - > fct0-worker (2191) 50

fct0-worker (2191) - > swapper (0) 50

swapper (0) - > bond0 (3432) 50

bond0 (3432) - > swapper (0 ) 50

stapio (879) - > swapper (0) 26

swapper (0) - > stapio (879) 25

stapio (879) - > swapper (0) 19

swapper (0) - > stapio (879) 17

swapper (0) - > Watchdog /9 (31) 5

watchdog /9 (31) - > swapper (0) 5

swapper (0) - > mysqld (18346) 5

mysqld (18346) - > swapper (0) 5

swapper (0) - > watchdog /13 (43) 5

watchdog /13 (43) - > swapper ( 0) 5

swapper (0) - > watchdog /14 (46) 5

watchdog /14 (46) - > swapper (0) 5

inactivo 859

------------------------------------------- -------------------

...

Podemos ver desde dónde se está cambiando el proceso y cuántas veces sucedió La última línea, la cantidad de veces que imprimo el inactivo, es decir, en este momento, el sistema no tiene nada que hacer, luego cambia al proceso inactivo (0) para que descanse.

A través de la investigación anterior, entenderemos claramente que la sobrecarga de nuestro sistema está ahí, de modo que podamos localizar el problema

Copyright © Conocimiento de Windows All Rights Reserved