ОБНОВЛЕНИЕ: Проблема в моем связанном вопросе - Проблема производительности Nokogiri
У меня серьезная проблема с моей программой.После того, как программа достигает своего последнего утверждения, студия Aptana показывает, что программа все еще работает, даже после того, как была оценена последняя строка.Процесс Ruby (после последней строки скрипта) все еще выполняется с 100% загрузкой ЦП, он заканчивается через несколько секунд (возможно, 15-30).Я пытаюсь хотя бы увидеть, в чем проблема, но спустя долгое время я все еще в начале.Итак, вопрос в том, что может вызвать эту проблему и как я могу хотя бы увидеть, где проблема, какие у меня варианты?Некоторая дополнительная информация:
Режим отладки Aptana: после последней строки это отобразится в окне отладки: <terminated, exit value: 0>path/to/ruby
Но процесс Ruby все еще работает и использует 100% CPU
Я пыталсяиспользовать gdb для профилирования самого процесса Ruby, но ничего не получилось с помощью метода, описанного здесь: Profilig с использованием gdb .Я использую Debian Squeeze 64-bit, и я попробовал обе версии скрипта (8,12> 16,24).Когда я пытался получить некоторую информацию о стеке, я просто получал следующее:
Program received signal SIGSEGV, Segmentation fault.
0x00007f20539a80b8 in ?? () from /lib/libc.so.6
/home/giron/programovani/gdb_init.sh:1: Error in sourced command file:
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on".
Evaluation of the expression containing the function
(backtrace) will be abandoned.
When the function is done executing, GDB will silently stop.
После того, как я выйду из gdb, в консоли Aptana появляется следующий вывод (но это может быть абсолютно бесполезно, возможно, это сделал gdb,не знаю):
/home/giron/Aptana Studio 3 Workspace/RedisXmlConcept/bin/main.rb: [BUG] Segmentation fault
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
-- control frame ----------
c:0001 p:0000 s:0002 b:0002 l:000f68 d:000f68 TOP
---------------------------
-- C level backtrace information -------------------------------------------
/home/giron/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(rb_vm_bugreport+0x5f)[0x7f205488216f]
/home/giron/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(+0x63274) [0x7f205476a274]
/home/giron/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(rb_bug+0xb3) [0x7f205476a413]
/home/giron/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(+0x10c215) [0x7f2054813215]
/lib/libpthread.so.0(+0xeff0) [0x7f20544f9ff0]
/lib/libc.so.6(+0xe40b8) [0x7f20539a80b8]
/lib/libgcc_s.so.1(_Unwind_Backtrace+0x49) [0x7f2050d5b599]
/lib/libc.so.6(backtrace+0x4e) [0x7f20539a81ae]
/home/giron/.rvm/rubies/ruby-1.9.2-p290/bin/ruby(_start+0) [0x400890]
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
Просто чтобы быть уверенным, что я хорошо описал проблему, последняя строка кода (перед этим выполняется разбор Nokogiri и работа с базой данных Redis):
puts "End"
Конец распечатывается, и после этого процесс Ruby будет потреблять 100% ЦП в течение нескольких секунд
Этот вопрос связан с моим предыдущим здесь: Проблема производительности Nokogiri где еще несколько фрагментов кодано так как я сосредоточен на другом подходе (профилирование Ruby), я создал новый вопрос.
Заранее благодарю за любые советы, сейчас я почти ничего не понимаю.