modrails - процессы рубина жулика, использующие 100% CPU

Если это помогает, у меня была аналогичная потребность в биржевых торговых календарях. Был некоторый превосходный код, похороненный в проекте Zipline Quantopian. Я извлек соответствующую часть и создал новый проект по созданию биржевых торговых календарей в пандах. Ссылки здесь, с некоторыми из функций, описанных ниже.

https://github.com/rsheftel/pandas_market_calendars

https: //pypi.python.org/pypi/pandas-market-calendars

Вот что он может сделать, создав pandas DatetimeIndex из всех действительных открытых часов для NYSE:

import pandas_market_calendars as mcal
nyse = mcal.get_calendar('NYSE')

early = nyse.schedule(start_date='2012-07-01', end_date='2012-07-10')
early

                  market_open             market_close
=========== ========================= =========================
2012-07-02 2012-07-02 13:30:00+00:00 2012-07-02 20:00:00+00:00
2012-07-03 2012-07-03 13:30:00+00:00 2012-07-03 17:00:00+00:00
2012-07-05 2012-07-05 13:30:00+00:00 2012-07-05 20:00:00+00:00
2012-07-06 2012-07-06 13:30:00+00:00 2012-07-06 20:00:00+00:00
2012-07-09 2012-07-09 13:30:00+00:00 2012-07-09 20:00:00+00:00
2012-07-10 2012-07-10 13:30:00+00:00 2012-07-10 20:00:00+00:00

mcal.date_range(early, frequency='1D')

DatetimeIndex(['2012-07-02 20:00:00+00:00', '2012-07-03 17:00:00+00:00',
               '2012-07-05 20:00:00+00:00', '2012-07-06 20:00:00+00:00',
               '2012-07-09 20:00:00+00:00', '2012-07-10 20:00:00+00:00'],
               dtype='datetime64[ns, UTC]', freq=None)

mcal.date_range(early, frequency='1H')

DatetimeIndex(['2012-07-02 14:30:00+00:00', '2012-07-02 15:30:00+00:00',
               '2012-07-02 16:30:00+00:00', '2012-07-02 17:30:00+00:00',
               '2012-07-02 18:30:00+00:00', '2012-07-02 19:30:00+00:00',
               '2012-07-02 20:00:00+00:00', '2012-07-03 14:30:00+00:00',
               '2012-07-03 15:30:00+00:00', '2012-07-03 16:30:00+00:00',
               '2012-07-03 17:00:00+00:00', '2012-07-05 14:30:00+00:00',
               '2012-07-05 15:30:00+00:00', '2012-07-05 16:30:00+00:00',
               '2012-07-05 17:30:00+00:00', '2012-07-05 18:30:00+00:00',
               '2012-07-05 19:30:00+00:00', '2012-07-05 20:00:00+00:00',
               '2012-07-06 14:30:00+00:00', '2012-07-06 15:30:00+00:00',
               '2012-07-06 16:30:00+00:00', '2012-07-06 17:30:00+00:00',
               '2012-07-06 18:30:00+00:00', '2012-07-06 19:30:00+00:00',
               '2012-07-06 20:00:00+00:00', '2012-07-09 14:30:00+00:00',
               '2012-07-09 15:30:00+00:00', '2012-07-09 16:30:00+00:00',
               '2012-07-09 17:30:00+00:00', '2012-07-09 18:30:00+00:00',
               '2012-07-09 19:30:00+00:00', '2012-07-09 20:00:00+00:00',
               '2012-07-10 14:30:00+00:00', '2012-07-10 15:30:00+00:00',
               '2012-07-10 16:30:00+00:00', '2012-07-10 17:30:00+00:00',
               '2012-07-10 18:30:00+00:00', '2012-07-10 19:30:00+00:00',
               '2012-07-10 20:00:00+00:00'],
              dtype='datetime64[ns, UTC]', freq=None)

Если вы просто хотите получить календарь календаря панд, который можно использовать в других функциях панды, которые принимают это как аргумент:

holidays = nyse.holidays()

holidays.holidays[-5:]
(numpy.datetime64('2030-05-27'),
 numpy.datetime64('2030-07-04'),
 numpy.datetime64('2030-09-02'),
 numpy.datetime64('2030-11-28'),
 numpy.datetime64('2030-12-25'))

19
задан lamplighter 8 March 2009 в 07:13
поделиться

3 ответа

При использовании Linux можно установить "strace" утилиту для наблюдения то, что делает процесс Ruby, это использует весь ЦП. Это выскажет Вам хорошее мнение низкого уровня. Это должно быть доступно в Вашем диспетчере пакетов. Затем Вы можете:

$ sudo strace -p 22710
Process 22710 attached - interrupt to quit
...lots of stuff...
(press Ctrl+C)

Затем если Вы хотите остановить процесс в середине и вывести отслеживание стека, можно следовать руководству по использованию GDB в Ruby по http://eigenclass.org/hiki.rb?ruby+live+process+introspection, конкретно выполнению:

gdb --pid=(ruby process)
session-ruby
stdout_redirect
(in other terminal) tail -f /tmp/ruby_debug.(pid)
eval "caller"

Можно также использовать Драгоценный камень рубиновой отладки для удаленного соединения с сокетами отладки, которые Вы открываете, описанный в http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger

Также, кажется, существует проект на GitHub, обеспокоенном отладкой Пассажирских экземпляров, который выглядит интересным, но документации недостает: http://github.com/ddollar/socket-debugger/tree/master

11
ответ дан 30 November 2019 в 04:54
поделиться

Мы видели что-то подобное этому с очень длинными рабочими SQL-запросами.

MySQL уничтожил бы запросы, потому что они превысили длительный предел, и поток никогда не понимал, что запрос был мертв.

Можно хотеть проверить журналы транзакций базы данных.

2
ответ дан 30 November 2019 в 04:54
поделиться

Это - повторяющаяся проблема с пассажиром. Я видел эту проблему, много раз помогающую людям, которые выполнили рубин на направляющих с пассажиром. У меня нет фиксации, но Вы могли бы хотеть попробовать этот http://www.modrails.com/documentation/Users%20guide%20Apache.html#debugging_frozen

2
ответ дан 30 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: