[elephant-devel] Garbage collection problem
Chris Laux
chris at terraminds.com
Thu Sep 27 13:39:09 UTC 2007
> How about just giving us a profile of memory usage?
The profile is at the bottom of this message, in sbcl's sb-sprof format.
If you can't interpret the numbers let me know and I'll dig up the
explanation from the web. I'm not really sure how to interpret the
results, and it might be buggy, because asking the profiler to report
causes the same (similar?) condition as garbage collection, that is the
system hangs for minutes then works on as if nothing had happened (added
later: or never recovers again...)
> A likely candidate is the serializer, but I'm sure there could be other
> corner cases.
It occurred to me that I should just describe what I'm doing, maybe
there's an obvious stupidity on my side. I'm indexing short messages to
be queries by a text search engine.
A main BTree maps from words to (sub-)BTrees that in turn map from
ranking (e.g. time, for recency) to (persistent) result object. To
answer a query, I then look up the (sub-)BTrees for each word in the
query and map over their elements until I have enough to fill a result
page with the intersection of their results.
This is probably a rather extreme use of the DB, for example creating so
many persistent instances from the store might be the problem for the
GC? Is there a "nicer" way of doing something like this? E.g. mapping
only to id's, so as not to reconstruct an instance if all I'm going to
do with is is "intersect" it's occurrance between lists of messages?
Cheers,
Chris
[NB: the order of the two output tables is reversed for ease of use]
Number of samples: 390
Sample interval: 4 regions (approximately 32 kB)
Total sampling amount: 1560 regions (approximately 12480 kB)
Number of cycles: 0
Self Total Cumul
Nr Count % Count % Count % Function
------------------------------------------------------------------------
1 81 20.8 81 20.8 81 20.8
ELEPHANT-MEMUTIL::GRAB-BUFFER-STREAM
2 73 18.7 73 18.7 154 39.5 (SB-PCL::FAST-METHOD
ELEPHANT-SERIALIZER2::DESERIALIZE-STRING (("#<...>" . "#<...>") "#<...>"
. "#<...>"))
3 57 14.6 57 14.6 211 54.1
ELEPHANT::DESERIALIZE-DATABASE-VERSION-VALUE
4 56 14.4 56 14.4 267 68.5
ELEPHANT-MEMUTIL::RETURN-BUFFER-STREAM
5 50 12.8 50 12.8 317 81.3 FIND-PACKAGE
6 35 9.0 35 9.0 352 90.3
ELEPHANT-SERIALIZER2::GET-CIRCULARITY-VECTOR
7 16 4.1 16 4.1 368 94.4
ELEPHANT-SERIALIZER2::RELEASE-CIRCULARITY-VECTOR
8 12 3.1 12 3.1 380 97.4 ELEPHANT::GET-CACHED-INSTANCE
9 6 1.5 6 1.5 386 99.0 (LAMBDA (K V))
10 1 0.3 1 0.3 387 99.2 LIST
11 1 0.3 1 0.3 388 99.5
ELEPHANT::MAKE-TRANSACTION-RECORD
12 1 0.3 1 0.3 389 99.7 (SB-PCL::FAST-METHOD
MAKE-CURSOR (DB-BDB::BDB-BTREE))
13 1 0.3 1 0.3 390 100.0
SB-KERNEL::%MAKE-INSTANCE-WITH-LAYOUT
14 0 0.0 244 62.6 390 100.0 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE)
15 0 0.0 307 78.7 390 100.0
ELEPHANT-SERIALIZER2::DESERIALIZE
16 0 0.0 378 96.9 390 100.0 (SB-PCL::FAST-METHOD
CURSOR-PREV (DB-BDB::BDB-CURSOR))
17 0 0.0 387 99.2 390 100.0 "Unknown component:
#x100F827230"
18 0 0.0 387 99.2 390 100.0 (LAMBDA NIL)
19 0 0.0 390 100.0 390 100.0 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>"))
20 0 0.0 390 100.0 390 100.0 (SB-PCL::FAST-METHOD
MAP-BTREE (T "#<...>" . "#<...>"))
21 0 0.0 390 100.0 390 100.0 GET-BTREE-SUBSEQ
22 0 0.0 390 100.0 390 100.0 (LAMBDA (&OPTIONAL ("#<...>"
. "#<...>")))
23 0 0.0 390 100.0 390 100.0 (LAMBDA (&OPTIONAL ("#<...>"
. "#<...>")))
24 0 0.0 390 100.0 390 100.0 (LAMBDA (&OPTIONAL ("#<...>"
. "#<...>") "#<...>" . "#<...>"))
25 0 0.0 390 100.0 390 100.0 ANSWER-QUERY
26 0 0.0 390 100.0 390 100.0 PRODUCE-FEED
27 0 0.0 390 100.0 390 100.0 HUNCHENTOOT::PROCESS-REQUEST
28 0 0.0 390 100.0 390 100.0 HUNCHENTOOT::PROCESS-CONNECTION
29 0 0.0 390 100.0 390 100.0 "Unknown component:
#x1000677630"
30 0 0.0 390 100.0 390 100.0 "foreign function
call_into_lisp"
31 0 0.0 390 100.0 390 100.0 "foreign function
new_thread_trampoline"
32 0 0.0 29 7.4 390 100.0 SB-INT:%FIND-PACKAGE-OR-LOSE
33 0 0.0 29 7.4 390 100.0
SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE
34 0 0.0 29 7.4 390 100.0 INTERN
35 0 0.0 121 31.0 390 100.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION (DB-BDB::BDB-STORE-CONTROLLER))
36 0 0.0 121 31.0 390 100.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION :AROUND (T))
37 0 0.0 34 8.7 390 100.0 (FLET #:CLEANUP-FUN-279)
38 0 0.0 22 5.6 390 100.0 (FLET #:CLEANUP-FUN-1505)
39 0 0.0 21 5.4 390 100.0 TRANSLATE-AND-INTERN-SYMBOL
40 0 0.0 1 0.3 390 100.0 PACKAGE-NAME
41 0 0.0 2 0.5 390 100.0 (SB-PCL::FAST-METHOD
CURSOR-LAST (DB-BDB::BDB-CURSOR))
42 0 0.0 1 0.3 390 100.0
SB-ALIEN-INTERNALS:MAKE-ALIEN-VALUE
------------------------------------------------------------------------
Callers
Total. Function
Count % Count % Callees
------------------------------------------------------------------------
30 7.7 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION (DB-BDB::BDB-STORE-CONTROLLER)) [35]
51 13.1 (SB-PCL::FAST-METHOD CURSOR-PREV
(DB-BDB::BDB-CURSOR)) [16]
81 20.8 81 20.8 ELEPHANT-MEMUTIL::GRAB-BUFFER-STREAM [1]
------------------------------------------------------------------------
73 18.7 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
73 18.7 73 18.7 (SB-PCL::FAST-METHOD
ELEPHANT-SERIALIZER2::DESERIALIZE-STRING (("#<...>" . "#<...>") "#<...>"
. "#<...>")) [2]
------------------------------------------------------------------------
57 14.6 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION (DB-BDB::BDB-STORE-CONTROLLER)) [35]
57 14.6 57 14.6 ELEPHANT::DESERIALIZE-DATABASE-VERSION-VALUE [3]
------------------------------------------------------------------------
22 5.6 (FLET #:CLEANUP-FUN-1505) [38]
34 8.7 (FLET #:CLEANUP-FUN-279) [37]
56 14.4 56 14.4 ELEPHANT-MEMUTIL::RETURN-BUFFER-STREAM [4]
------------------------------------------------------------------------
21 5.4 TRANSLATE-AND-INTERN-SYMBOL [39]
29 7.4 SB-INT:%FIND-PACKAGE-OR-LOSE [32]
50 12.8 50 12.8 FIND-PACKAGE [5]
------------------------------------------------------------------------
35 9.0 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
35 9.0 35 9.0 ELEPHANT-SERIALIZER2::GET-CIRCULARITY-VECTOR [6]
------------------------------------------------------------------------
16 4.1 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
16 4.1 16 4.1
ELEPHANT-SERIALIZER2::RELEASE-CIRCULARITY-VECTOR [7]
------------------------------------------------------------------------
12 3.1 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
12 3.1 12 3.1 ELEPHANT::GET-CACHED-INSTANCE [8]
------------------------------------------------------------------------
6 1.5 "Unknown component: #x100F827230" [17]
6 1.5 6 1.5 (LAMBDA (K V)) [9]
------------------------------------------------------------------------
1 0.3 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>")) [19]
1 0.3 1 0.3 LIST [10]
------------------------------------------------------------------------
1 0.3 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>")) [19]
1 0.3 1 0.3 ELEPHANT::MAKE-TRANSACTION-RECORD [11]
------------------------------------------------------------------------
1 0.3 "Unknown component: #x100F827230" [17]
1 0.3 1 0.3 (SB-PCL::FAST-METHOD MAKE-CURSOR
(DB-BDB::BDB-BTREE)) [12]
------------------------------------------------------------------------
1 0.3 SB-ALIEN-INTERNALS:MAKE-ALIEN-VALUE [42]
1 0.3 1 0.3 SB-KERNEL::%MAKE-INSTANCE-WITH-LAYOUT [13]
------------------------------------------------------------------------
244 62.6 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
1 0.3 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
0 0.0 244 62.6 (LABELS ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
21 5.4 TRANSLATE-AND-INTERN-SYMBOL [39]
121 31.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION :AROUND (T)) [36]
29 7.4 INTERN [34]
1 0.3 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
73 18.7 (SB-PCL::FAST-METHOD
ELEPHANT-SERIALIZER2::DESERIALIZE-STRING (("#<...>" . "#<...>") "#<...>"
. "#<...>")) [2]
------------------------------------------------------------------------
2 0.5 (SB-PCL::FAST-METHOD CURSOR-LAST
(DB-BDB::BDB-CURSOR)) [41]
305 78.2 (SB-PCL::FAST-METHOD CURSOR-PREV
(DB-BDB::BDB-CURSOR)) [16]
0 0.0 307 78.7 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
16 4.1
ELEPHANT-SERIALIZER2::RELEASE-CIRCULARITY-VECTOR [7]
12 3.1 ELEPHANT::GET-CACHED-INSTANCE [8]
35 9.0
ELEPHANT-SERIALIZER2::GET-CIRCULARITY-VECTOR [6]
244 62.6 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
------------------------------------------------------------------------
378 96.9 "Unknown component: #x100F827230" [17]
0 0.0 378 96.9 (SB-PCL::FAST-METHOD CURSOR-PREV
(DB-BDB::BDB-CURSOR)) [16]
22 5.6 (FLET #:CLEANUP-FUN-1505) [38]
51 13.1 ELEPHANT-MEMUTIL::GRAB-BUFFER-STREAM [1]
305 78.2 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
------------------------------------------------------------------------
387 99.2 (LAMBDA NIL) [18]
0 0.0 387 99.2 "Unknown component: #x100F827230" [17]
1 0.3 (SB-PCL::FAST-METHOD MAKE-CURSOR
(DB-BDB::BDB-BTREE)) [12]
2 0.5 (SB-PCL::FAST-METHOD CURSOR-LAST
(DB-BDB::BDB-CURSOR)) [41]
6 1.5 (LAMBDA (K V)) [9]
378 96.9 (SB-PCL::FAST-METHOD CURSOR-PREV
(DB-BDB::BDB-CURSOR)) [16]
------------------------------------------------------------------------
387 99.2 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>")) [19]
0 0.0 387 99.2 (LAMBDA NIL) [18]
387 99.2 "Unknown component: #x100F827230" [17]
------------------------------------------------------------------------
390 100.0 (SB-PCL::FAST-METHOD MAP-BTREE (T
"#<...>" . "#<...>")) [20]
0 0.0 390 100.0 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>")) [19]
1 0.3 SB-ALIEN-INTERNALS:MAKE-ALIEN-VALUE [42]
1 0.3 ELEPHANT::MAKE-TRANSACTION-RECORD [11]
1 0.3 LIST [10]
387 99.2 (LAMBDA NIL) [18]
------------------------------------------------------------------------
390 100.0 GET-BTREE-SUBSEQ [21]
0 0.0 390 100.0 (SB-PCL::FAST-METHOD MAP-BTREE (T "#<...>" .
"#<...>")) [20]
390 100.0 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>")) [19]
------------------------------------------------------------------------
390 100.0 (LAMBDA (&OPTIONAL ("#<...>" .
"#<...>"))) [22]
0 0.0 390 100.0 GET-BTREE-SUBSEQ [21]
390 100.0 (SB-PCL::FAST-METHOD MAP-BTREE (T
"#<...>" . "#<...>")) [20]
------------------------------------------------------------------------
390 100.0 (LAMBDA (&OPTIONAL ("#<...>" .
"#<...>"))) [23]
0 0.0 390 100.0 (LAMBDA (&OPTIONAL ("#<...>" . "#<...>"))) [22]
390 100.0 GET-BTREE-SUBSEQ [21]
------------------------------------------------------------------------
390 100.0 (LAMBDA (&OPTIONAL ("#<...>" . "#<...>")
"#<...>" . "#<...>")) [24]
0 0.0 390 100.0 (LAMBDA (&OPTIONAL ("#<...>" . "#<...>"))) [23]
390 100.0 (LAMBDA (&OPTIONAL ("#<...>" .
"#<...>"))) [22]
------------------------------------------------------------------------
390 100.0 ANSWER-QUERY [25]
0 0.0 390 100.0 (LAMBDA (&OPTIONAL ("#<...>" . "#<...>")
"#<...>" . "#<...>")) [24]
390 100.0 (LAMBDA (&OPTIONAL ("#<...>" .
"#<...>"))) [23]
------------------------------------------------------------------------
390 100.0 PRODUCE-FEED [26]
0 0.0 390 100.0 ANSWER-QUERY [25]
390 100.0 (LAMBDA (&OPTIONAL ("#<...>" . "#<...>")
"#<...>" . "#<...>")) [24]
------------------------------------------------------------------------
390 100.0 HUNCHENTOOT::PROCESS-REQUEST [27]
0 0.0 390 100.0 PRODUCE-FEED [26]
390 100.0 ANSWER-QUERY [25]
------------------------------------------------------------------------
390 100.0 HUNCHENTOOT::PROCESS-CONNECTION [28]
0 0.0 390 100.0 HUNCHENTOOT::PROCESS-REQUEST [27]
390 100.0 PRODUCE-FEED [26]
------------------------------------------------------------------------
390 100.0 "Unknown component: #x1000677630" [29]
0 0.0 390 100.0 HUNCHENTOOT::PROCESS-CONNECTION [28]
390 100.0 HUNCHENTOOT::PROCESS-REQUEST [27]
------------------------------------------------------------------------
390 100.0 "foreign function call_into_lisp" [30]
0 0.0 390 100.0 "Unknown component: #x1000677630" [29]
390 100.0 HUNCHENTOOT::PROCESS-CONNECTION [28]
------------------------------------------------------------------------
390 100.0 "foreign function new_thread_trampoline" [31]
0 0.0 390 100.0 "foreign function call_into_lisp" [30]
390 100.0 "Unknown component: #x1000677630" [29]
------------------------------------------------------------------------
0 0.0 390 100.0 "foreign function new_thread_trampoline" [31]
390 100.0 "foreign function call_into_lisp" [30]
------------------------------------------------------------------------
1 0.3 PACKAGE-NAME [40]
28 7.2 SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE [33]
0 0.0 29 7.4 SB-INT:%FIND-PACKAGE-OR-LOSE [32]
29 7.4 FIND-PACKAGE [5]
------------------------------------------------------------------------
29 7.4 INTERN [34]
0 0.0 29 7.4 SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE [33]
1 0.3 PACKAGE-NAME [40]
28 7.2 SB-INT:%FIND-PACKAGE-OR-LOSE [32]
------------------------------------------------------------------------
29 7.4 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
0 0.0 29 7.4 INTERN [34]
29 7.4 SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE [33]
------------------------------------------------------------------------
121 31.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION :AROUND (T)) [36]
0 0.0 121 31.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION (DB-BDB::BDB-STORE-CONTROLLER)) [35]
30 7.7 ELEPHANT-MEMUTIL::GRAB-BUFFER-STREAM [1]
34 8.7 (FLET #:CLEANUP-FUN-279) [37]
57 14.6
ELEPHANT::DESERIALIZE-DATABASE-VERSION-VALUE [3]
------------------------------------------------------------------------
121 31.0 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
0 0.0 121 31.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION :AROUND (T)) [36]
121 31.0 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION (DB-BDB::BDB-STORE-CONTROLLER)) [35]
------------------------------------------------------------------------
34 8.7 (SB-PCL::FAST-METHOD
ELEPHANT::DATABASE-VERSION (DB-BDB::BDB-STORE-CONTROLLER)) [35]
0 0.0 34 8.7 (FLET #:CLEANUP-FUN-279) [37]
34 8.7 ELEPHANT-MEMUTIL::RETURN-BUFFER-STREAM [4]
------------------------------------------------------------------------
22 5.6 (SB-PCL::FAST-METHOD CURSOR-PREV
(DB-BDB::BDB-CURSOR)) [16]
0 0.0 22 5.6 (FLET #:CLEANUP-FUN-1505) [38]
22 5.6 ELEPHANT-MEMUTIL::RETURN-BUFFER-STREAM [4]
------------------------------------------------------------------------
21 5.4 (LABELS
ELEPHANT-SERIALIZER2::%DESERIALIZE) [14]
0 0.0 21 5.4 TRANSLATE-AND-INTERN-SYMBOL [39]
21 5.4 FIND-PACKAGE [5]
------------------------------------------------------------------------
1 0.3 SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE [33]
0 0.0 1 0.3 PACKAGE-NAME [40]
1 0.3 SB-INT:%FIND-PACKAGE-OR-LOSE [32]
------------------------------------------------------------------------
2 0.5 "Unknown component: #x100F827230" [17]
0 0.0 2 0.5 (SB-PCL::FAST-METHOD CURSOR-LAST
(DB-BDB::BDB-CURSOR)) [41]
2 0.5 ELEPHANT-SERIALIZER2::DESERIALIZE [15]
------------------------------------------------------------------------
1 0.3 (SB-PCL::FAST-METHOD
ELEPHANT::EXECUTE-TRANSACTION (DB-BDB::BDB-STORE-CONTROLLER "#<...>" .
"#<...>")) [19]
0 0.0 1 0.3 SB-ALIEN-INTERNALS:MAKE-ALIEN-VALUE [42]
1 0.3 SB-KERNEL::%MAKE-INSTANCE-WITH-LAYOUT [13]
------------------------------------------------------------------------
More information about the elephant-devel
mailing list