2009-01-11 34 views
6

¡Hola comunidad de stackoverflow!Muy poca utilización de CPU en Java

Tengo un problema en el que un programa algorítmico muy complicado utiliza TOO LITTLE cpu: entre el 3 y el 4%. Toma mucho tiempo devolver los resultados, y creo que simplemente no está trabajando lo suficiente.

¿Alguno de ustedes, genios, tiene alguna idea de por qué ocurriría esto? En todo caso, esperaría un 100% de utilización. Un detalle adicional es que el programa hace inserciones en una base de datos sqlite3, y así sí, hay muchas llamadas JNI a través de la biblioteca sqlite3jdbc, creo. (Tenga en cuenta que quería diferir estas inserciones con un lote de PreparedQuery antes, pero esto causó problemas importantes de memoria, hay una gran cantidad de datos).

Gracias de antemano

ACTUALIZACIÓN: se ha corregido. Sí, solo estaba siendo un bobo, pero no esperaba que sqlite comenzara una nueva transacción y hiciera demasiada sobrecarga.

Ahora uso un PreparedStatement y hago cola 32768 entradas antes de insertarlo - me pareció un número lo suficientemente bueno.

Respuesta

1

Obviamente, las llamadas a la base de datos están causando retrasos. ¿No es una opción crear lotes más pequeños y probar si eso ayuda? ¿Tal vez podría paralelizar el algoritmo y tener una cola en algún lugar tomando los resultados y otro hilo limpiando esa cola?

edición:

También hay algunas otras áreas problemáticas:

  • Base de Datos de Optimización (modelo)
  • configuración del servidor de base de datos
  • velocidad del disco

Todos estos factores deben tenerse en cuenta

1

Si está escribiendo una gran cantidad de datos, parece que puede estar en el disco. Eche un vistazo a las estadísticas de su disco en la máquina, y si ese es realmente el cuello de botella, busque hardware con mejor io o descubra cómo hacer menos escrituras.

4

Nunca recomendaría que alguien use un controlador JDBC con JNI si hay disponible una versión de tipo IV 100% Java. Google encontró this uno.

Con eso aparte, no puedo decir nada sin más información. ¿La aplicación y la base de datos se ejecutan en el mismo hardware?

¿Qué es tan "intensivo" sobre INSERT?

Recomiendo crear perfiles y obtener algunos datos reales en lugar de adivinar. La informática basada en la fe nunca funciona para mí.

0

El disco está ralentizando su aplicación. INSERTS usa el disco, el disco es lento y el sistema operativo necesita esperar a que finalicen las operaciones de escritura.

¿No puedes usar 2 hilos, uno para el algoritmo y otro para los insertos? Si solo hace inserciones, también puede escribir en un archivo de texto y ejecutarlas más tarde

+0

La comunicación multiproceso es más lenta que poner en cola las actualizaciones y enjuagarlas en el mismo subproceso, y también es más complicado obtener errores. para programadores que no son "nacidos seguros para subprocesos". – Blaisorblade

Cuestiones relacionadas