Em đang thử build một Web chat sử dụng Spring Webflux và WebSocket, nhưng đang vướng một vài vấn đề về bộ nhớ.
Khi em sủ dụng WebSocket trong Webflux thì có sử dụng Sinks.Many để lưu lại sự kiện sau đó sẽ gửi tới những người đã đăng ký những sự kiện mới. Có một vấn đề ở đây là khi em chạy stress test tầm 2000 kết nối trong vòng 1 phút chương trình thì lượng RAM bị tiêu thụ rất lớn, ngay cả khi không còn connection nào được kết nối cả. Sau đó một khoảng thời gian thì lượng RAM lại được giảm khá nhiều.
VD:
– Lúc bắt đầu chạy: 161 MB
Stress test lần 1:
– Sau khi có 2000 kết nối: 854 MB
– Khi không còn kết nối nào: 592 MB
Stress test lần 2:
– Tiếp tục 2000 kết nối: 592 MB -> 1290 MB
– Khi không còn kết nối nào: 1012 MB
Sau tầm 15-20 phút thì lượng RAM giảm về 686 MB
Còn một điều nữa là mặc dù không có kết nối nào, nhưng RAM vẫn cứ tăng nhẹ 0,1MB/1s sau khi stress test(đóng hết kết nối và server vẫn chạy)
Dưới đây là đoạn code của em. Không biết có cách nào để giải phóng RAM khi các kết nối đã ngắt không ạ?
Em xin đặt code ở link dưới cho nó dễ nhìn ạ
Link code