2009-09-27 8 views
5

Necesito usar Valgrind para detectar cualquier violación de acceso a memoria realizada en una aplicación de servidor. El servidor crea muchos hilos. Sospecho que hay una condición de carrera que hace que el servidor se bloquee cada 1 hora más o menos. Usamos Valgrind para analizar su uso de memoria, pero la velocidad del proceso del servidor disminuyó drásticamente. La velocidad del servidor disminuyó tanto que era difícil de usar y no era probable que hubiera condiciones de carrera.¿Cómo ejecutar Valgrind en paralelo con nuestro proceso para que su rendimiento no disminuya demasiado?

¿Hay alguna forma de ejecutar Valgrind en paralelo con nuestra aplicación para que no perdamos ese rendimiento?

Respuesta

5

Vale la pena señalar que Valgrind, aunque admite programas de subprocesos múltiples, en realidad no ejecutará los subprocesos del programa en paralelo si tiene varios núcleos disponibles. También entrelaza los hilos en un grano más fino que el programador nativo del sistema operativo. Estos 2 hechos combinados pueden hacer que un programa con condiciones de carrera u otras anomalías concurrentes se comporten de manera diferente.

Es posible que desee probar Helgrind, una herramienta destinada principalmente a detectar la disciplina de bloqueo correcta y drd, una herramienta destinada principalmente a la detección de carreras de datos.

1

Esto no está respondiendo directamente su pregunta, pero si sospecha que hay un error de sincronización, ¿ha intentado utilizar la herramienta Valgrind Helgrind?

+0

No conocía a Helgrind antes ya que no soy un usuario profesional de Valgrind. Lo acabo de enterar hoy. Sospecho que un objeto se está eliminando pero otro hilo está intentando acceder a él y eso bloquea el proceso. Esto es altamente probable ya que la aplicación ha sido codificada muy pobremente. Probaré con Helgrind y veré qué puede ofrecer. –

9

No puede hacer eso. Valgrind en realidad no ejecuta su código de forma nativa, sino que lo ejecuta dentro de un simulador. Por eso es tan lento. Por lo tanto, no hay forma de hacerlo funcionar más rápido, y aún así obtener el beneficio de Valgrind.

Su mejor opción es configurar el ulimit para que su programa genere un archivo central cuando se cuelgue. Entonces puedes intentar averiguar cuál era el problema examinando el núcleo.

+1

+1, estaba a punto de dar una respuesta casi idéntica. –

0

Valgrind funciona enganchándose a sus llamadas malloc, por lo que puede esperar que su programa se ejecute más lento en valgrind. Por lo tanto, diría que no puede ejecutar su programa más rápido en valgrind y obtener el beneficio de analizar los errores de memoria.

Cuestiones relacionadas