[Megoldva] grep - "Cannot allocate memory" ("Nem foglalható memória")

Fórumok

Szervusztok!

Adott egy ~2GB méretű file, amire szeretném a grep-et ráengedni. Semmi extra regexp, szimpla "bitkolbász".
2GB memória, majd utána még 2-t alátettem swap formájában, de sajnos nem segített.
Squeeze, ulimit alap, miből lehetne még kivarázsolni értelmes határoló dolgot tartalmazó beállítást?
Köszönöm előre is!
Üdv,
vf

Hozzászólások

Melyik grep-pel próbálkozol? GNU? Próbálj BSD-st, vagy plan9port-ost.

--------------------------------------
Unix isn't dead. It just smells funny.

Az a fő különbség, hogy a GNU grep-ben van backtracking, ami miatt kénytelen memóriában tartani előző állapotokat, míg a plan9 implementáció egy sima state machine, emiatt gyorsabb és kevesebb memóriát is eszik.

--------------------------------------
Unix isn't dead. It just smells funny.

GNU grep-ben van backtracking [...] a plan9 implementáció egy sima state machine

Van erről több infód? (Már azon túl persze, hogy nézzem meg a forrást... a GNU grep-ébe nem kívánkozik belenéznem.) Azért is érdekel a kérdés, mert fgrep üzemmódban nem látom, miféle backtracking-ra lehet szükség. (De már késő van...)

Ez biztosan nem igaz. GNU grep először heurisztikával megy rá ha lehet (egy pattern esetén Boyer-Moore variáns, több pattern esetén pedig Commentz-Walter algoritmussal), majd csak egy már jól behatárolt esélyesen illeszkedő területre hívja meg a teljes regex matchert, ami pedig egy DFA megvalósítás.

Csak hogy kerek legyen...

- Debian 6.0.5 32bit (i386)
- grep, egrep, fgrep, GNU grep 2.6.3
- This is agrep version 3.0, 1994.
- /usr/lib/plan9/bin/grep 1:6-1

a minta: "dreh" (drehás, csak hogy az ékezettel ne kelljen macerálódni)

a file: sima thunderbird mail file ami sérült, nem tudja az alkalmazás fel parsol-ni. >2GB
Üdv,
vf

Feltételezem, hogy linux alól vagy (mivel erről nem adtál infót). Akkor ez mind GNU. A különbség egyszerüsítve:

fgrep - kész szövegre, külenleges karakterek nélkül.
grep - ez van legközelebb az ed(1) RE-ihez
egrep - bővített RE-k.

Lent említett --mmap kapcsolót megpróbálhatod, bár nem hiszem, hogy jelen esetben segít.

Ha tényleg nagyon egyszerű a minta, amit keresel, akkor lehet a legegyszerűbb megoldás, írni rá egy pár soros C programot. Nem kell ágyúval lőni verébre. A RE-k elég nehézsúlyú dolgok.

--------------------------------------
Unix isn't dead. It just smells funny.

Vagy darabold fel egyenlore reszekre es probald ki ugy.
--
1 leszel vagy 0 élő vagy hulla!

Megpróbálnám, hogy a grep helyett eszi-e az awk.

1. miféle a file szerkezete? ha van benne egy 1.5 GB hosszú sor (= amin belül nincs újsor karakter), jó eséllyel megpróbálhatja benyalni egyben.

2. grep --mmap

Kiegészítés: ha a grep 32 bites processz (ILP32), akkor tök mindegy, mennyi a swap-od. (És valószínűleg az --mmap sem fog segíteni, egyszerűen nincs elég címtér a processzben.)

Persze nem tudom, minek erőltetem magam, amikor ez megint egy pocsékul leírt hibajelenség.

Szia lacos!

Köszönöm segítséged, egyéb úton megoldódott, lsd. fentebb. Az mmap valóban nem elég a GNU grep-nek.

Sajnos csak ennyi volt a hibaüzenet amit én láttam belőle, nem álltam neki strace-elni ez igaz, bár mint látszik nem is kellett. Röpke egy óra alatt több ötletet is kaptam, ami simán célt ért, szóval szerintem elég volt a hiba leírása.

Azért hogy okuljak, kérlek tedd meg nekem, hogy ilyen esetben következőre miképp kell a hibajelenséget leírni?
Köszi előre is!
Üdv,
vf

miképp kell a hibajelenséget leírni

Írd le, hogy hogyan tudom a hibát reprodukálni. Kis túlzással onnantól kezdve, hogy bemegyek a boltba, és azt mondom, hogy "kérek egy számítógépet".

  • Milyen platform (x86_64, i686-pae, i686), esetleg 64 biten 32 bites program.
  • Disztribúció és kiadása.
  • Program neve és pontos verziószáma (a disztró által hozzáragasztott cuccok is), dpkg-val / rpm-mel lekérdezve.
  • A file jellege. Nyilván bizalmas adatokat nem adhatsz meg, de valami pár soros utánzatot lehet.
  • Pontos parancssor (vagy utánzat, amivel tudod reprodukálni). Pontos (lehetőleg teljes) hibaüzenet / log, ha ennek van értelme.
  • Hiba szöveges leírása. Mi történik. Minek kellene történnie. Mennyire megbízhatóan reprodukálható.