@@ -8,52 +8,52 @@ const log = Log.create({ service: "heap" })
88const MINUTE = 60_000
99const LIMIT = 2 * 1024 * 1024 * 1024
1010
11- export namespace Heap {
12- let timer : Timer | undefined
13- let lock = false
14- let armed = true
15-
16- export function start ( ) {
17- if ( ! Flag . OPENCODE_AUTO_HEAP_SNAPSHOT ) return
18- if ( timer ) return
19-
20- const run = async ( ) => {
21- if ( lock ) return
22-
23- const stat = process . memoryUsage ( )
24- if ( stat . rss <= LIMIT ) {
25- armed = true
26- return
27- }
28- if ( ! armed ) return
29-
30- lock = true
31- armed = false
32- const file = path . join (
33- Global . Path . log ,
34- `heap-${ process . pid } -${ new Date ( ) . toISOString ( ) . replace ( / [: .] / g, "" ) } .heapsnapshot` ,
35- )
36- log . warn ( "heap usage exceeded limit" , {
37- rss : stat . rss ,
38- heap : stat . heapUsed ,
39- file,
40- } )
11+ let timer : Timer | undefined
12+ let lock = false
13+ let armed = true
4114
42- await Promise . resolve ( )
43- . then ( ( ) => writeHeapSnapshot ( file ) )
44- . catch ( ( err ) => {
45- log . error ( "failed to write heap snapshot" , {
46- error : err instanceof Error ? err . message : String ( err ) ,
47- file,
48- } )
49- } )
15+ export function start ( ) {
16+ if ( ! Flag . OPENCODE_AUTO_HEAP_SNAPSHOT ) return
17+ if ( timer ) return
5018
51- lock = false
19+ const run = async ( ) => {
20+ if ( lock ) return
21+
22+ const stat = process . memoryUsage ( )
23+ if ( stat . rss <= LIMIT ) {
24+ armed = true
25+ return
5226 }
27+ if ( ! armed ) return
28+
29+ lock = true
30+ armed = false
31+ const file = path . join (
32+ Global . Path . log ,
33+ `heap-${ process . pid } -${ new Date ( ) . toISOString ( ) . replace ( / [: .] / g, "" ) } .heapsnapshot` ,
34+ )
35+ log . warn ( "heap usage exceeded limit" , {
36+ rss : stat . rss ,
37+ heap : stat . heapUsed ,
38+ file,
39+ } )
40+
41+ await Promise . resolve ( )
42+ . then ( ( ) => writeHeapSnapshot ( file ) )
43+ . catch ( ( err ) => {
44+ log . error ( "failed to write heap snapshot" , {
45+ error : err instanceof Error ? err . message : String ( err ) ,
46+ file,
47+ } )
48+ } )
5349
54- timer = setInterval ( ( ) => {
55- void run ( )
56- } , MINUTE )
57- timer . unref ?.( )
50+ lock = false
5851 }
52+
53+ timer = setInterval ( ( ) => {
54+ void run ( )
55+ } , MINUTE )
56+ timer . unref ?.( )
5957}
58+
59+ export * as Heap from "./heap"
0 commit comments