Domanda

Se si utilizza una libreria di PNL (Stanford NER), che genera errori OOM per i documenti di ingresso rare.

Ho intenzione di eventualmente isolare questi documenti e capire cosa su di loro causa gli errori, ma questo è difficile da fare (sto correndo in Hadoop, quindi so solo l'errore si verifica il 17% attraverso dividere 379/500 o qualcosa come quello). Come soluzione provvisoria, mi piacerebbe essere in grado di applicare un limite di CPU e memoria a questo particolare chiamata.

Non sono sicuro di ciò che il modo migliore per farlo sarebbe. Il mio primo pensiero è quello di creare un pool di thread fisso di un thread, e utilizzare il get a tempo () sulla futura. Ciò, almeno darmi un limite orologio da parete che probabilmente aiuterà un po '.

La mia domanda è se ci sia un modo per fare meglio di questo con una quantità ragionevole di sforzo.

È stato utile?

Soluzione

Basta prendere l'OutOfMemoryError, log che documentare foste su, per poi passare a quello successivo. Il garbage collector farà in modo di avere abbastanza memoria per il documento successivo.

(Questa è una delle strategie che uso con il parser Stanford dipendenza passare alla frase successiva, se una frase è troppo lunga o complicata da analizzare.)

Altri suggerimenti

Non ho familiarità con Hadoop, ma non dimenticate che il vostro JVM avrà un implicito limite di memoria superiore è stata inflitta (64Mb per un server, se la memoria non è corretto). Vorrei verificare ciò che la configurazione di memoria JVM è in esecuzione con (opzioni qui )

È possibile ignorare questa specificando il limite di memoria superiore così:

java -Xmx512m

a (diciamo) impostare il limite a 512 MB.

allocazione impostazione della CPU non rientra nelle competenze della JVM, e sarà un meccanismo specifico per OS (se si può farlo a tutti)

Se stai dispacciamento questi posti di lavoro in parallelo da una JVM poi l'esecuzione di un single-thread (o filo limitata) di thread può anche aiutare. Tuttavia (ancora una volta) questo dipende sono tenuti l'implementazione e ulteriori dettagli.

Se tutti si sta cercando di fare è capire quali documenti si infrangono, si dovrebbe mettere la registrazione in giro per la chiamata alla libreria NLP "in procinto di Mappa documento x". Quando si vede l'OOM, i registri per il mapper conterranno il documento di sventura. Come hai detto, si dovrebbe quindi determinare quali caratteristiche di tale documento causano la libreria in crash.

Nella mia esperienza, specie se i documenti sono stati creati da persone su Internet, troverete qualche documento enorme folle da qualche parte. A quel punto si deve decidere cosa fare con tali documenti; sia per ignorarli, forse li tronca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top