Процессы превращаются в зомби, пока параллельная сессия еще работает - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь выполнить запрос к моей БД большое количество раз и активировать некоторую логику в наборе результатов запроса.
Для этого я использую Roracle и dopar (Кстати, моя первая попытка была с RJDBC, но я переключился на Roracle, потому что получил Ошибка чтения из соединения; Сейчас Я больше не получаю эту ошибку, но у меня есть проблема, описанная ниже).

Проблема в том, что большая часть процесса умирает (превращается в зомби) во время параллельного сеанса. Я наблюдаю за этим с помощью команды top над моей системой Linux; файл журнала, который показывает мне прогресс моего параллельного цикла; и мониторинг моей БД во время сеанса. Когда я запускаю программу, я вижу, что рабочие загружены, и программа прогрессирует с высокой скоростью, но затем большинство из них умирает, и программа становится медленной (или вообще не работает) без сообщения об ошибке.

Вот пример кода того, что я пытаюсь сделать:

library(doParallel)
library(Roracle)

temp <- function(i) {

 # because you can't get access to my DB, it's irrelevant to file the following rows(where I put three dots)- But I checked my DB connection and it works fine. 

 drv <- ...
 host <- ...
 port <- ...
 sid <- ...
 connect.string <- paste(...) 

 conn_oracle <- dbConnect(drv, username=..., password=..., dbname=connect.string)

 myData <- dbGetQuery(conn_oracle, sprintf("SELECT '%s%' FROM dual", i))
 print(i)

 dbDisconnect(conn_oracle)
}

cl <- makeCluster(10, outfile = "par_log.txt")
registerDoParallel(cl)

output <- foreach(i=1:100000, .inorder=T, .verbose=T, .combine='rbind', 
                       .packages=c('Roracle'), 
                       .export=c('temp'))
          %dopar% {temp(i)}

stopCluster(cl)

Любая помощь будет оценена!

...