Fix memory leaks from orphaned uvx/python processes (#120)
This fixes memory leak, will remove one unnecessary MCP after this in a new PR but this is mission critical fix * Initial plan * Fix memory leaks: Add proper cleanup for ChromaSync and search server processes Co-authored-by: thedotmack <683968+thedotmack@users.noreply.github.com> * Add comprehensive process cleanup and PM2 configuration improvements Co-authored-by: thedotmack <683968+thedotmack@users.noreply.github.com> * Add comprehensive summary and recommendations for memory leak fixes Co-authored-by: thedotmack <683968+thedotmack@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: thedotmack <683968+thedotmack@users.noreply.github.com>
This commit is contained in:
@@ -1740,6 +1740,47 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Cleanup function to properly terminate all child processes
|
||||
async function cleanup() {
|
||||
console.error('[search-server] Shutting down...');
|
||||
|
||||
// Close Chroma client (terminates uvx/python processes)
|
||||
if (chromaClient) {
|
||||
try {
|
||||
await chromaClient.close();
|
||||
console.error('[search-server] Chroma client closed');
|
||||
} catch (error: any) {
|
||||
console.error('[search-server] Error closing Chroma client:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Close database connections
|
||||
if (search) {
|
||||
try {
|
||||
search.close();
|
||||
console.error('[search-server] SessionSearch closed');
|
||||
} catch (error: any) {
|
||||
console.error('[search-server] Error closing SessionSearch:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
if (store) {
|
||||
try {
|
||||
store.close();
|
||||
console.error('[search-server] SessionStore closed');
|
||||
} catch (error: any) {
|
||||
console.error('[search-server] Error closing SessionStore:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
console.error('[search-server] Shutdown complete');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
// Register cleanup handlers for graceful shutdown
|
||||
process.on('SIGTERM', cleanup);
|
||||
process.on('SIGINT', cleanup);
|
||||
|
||||
// Start the server
|
||||
async function main() {
|
||||
// Start the MCP server FIRST (critical - must start before blocking operations)
|
||||
|
||||
Reference in New Issue
Block a user