diff --git a/guix-data-service/web/server.scm b/guix-data-service/web/server.scm index e564a68..38e219b 100644 --- a/guix-data-service/web/server.scm +++ b/guix-data-service/web/server.scm @@ -21,6 +21,7 @@ #:use-module (srfi srfi-11) #:use-module (srfi srfi-71) #:use-module (ice-9 match) + #:use-module (ice-9 format) #:use-module (ice-9 threads) #:use-module (web http) #:use-module (web request) @@ -127,6 +128,30 @@ (setrlimit 'nofile 4096 4096)) #:unwind? #t) + (call-with-new-thread + (lambda () + (set-thread-name "gc watcher") + + (add-hook! + after-gc-hook + (let ((last-gc-time-taken + (assq-ref (gc-stats) 'gc-time-taken))) + (lambda () + (let* ((gc-time-taken + (assq-ref (gc-stats) 'gc-time-taken)) + (time-since-last + (/ (- gc-time-taken + last-gc-time-taken) + internal-time-units-per-second))) + (when (> time-since-last 0.1) + (format (current-error-port) + "after gc (additional time taken: ~f)\n" + time-since-last)) + (set! last-gc-time-taken + (assq-ref (gc-stats) 'gc-time-taken)))))) + (while #t + (sleep 0.1)))) + (let ((finished? (make-condition)) (request-scheduler #f)) (call-with-sigint