[ 
https://issues.apache.org/jira/browse/CAMEL-25812?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Serdar Gökay reassigned CAMEL-25812:
------------------------------------

    Assignee: Serdar Gökay

> camel-milo - end idle client connection threads, and give each request 
> outcome a virtual thread with virtual threads
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25812
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25812
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-milo
>            Reporter: Serdar Gökay
>            Assignee: Serdar Gökay
>            Priority: Minor
>
> Since CAMEL-25713 (https://github.com/apache/camel/pull/28049), each 
> milo-client and milo-browse connection handles the outcome of its write, 
> method call, read and browse requests, and runs its reconnects, on a 
> scheduled thread pool of its own with one thread per processor. As Claus 
> noted in the review 
> (https://github.com/apache/camel/pull/28049#discussion_r4307398068), the 
> threads of a scheduled pool never end while the connection is open, and with 
> virtual threads Camel's scheduled pool has a single worker.
> Measured with host JVMs, the client limited to 8 processors 
> (-XX:ActiveProcessorCount=8), against a local Milo server:
> - 30 connections, idle after a load: 240 MiloClient threads, which stay until 
> the connections are closed (main: none, Milo's 8 shared threads).
> - With camel.threads.virtual.enabled=true, 1 connection with 32 callers and 
> 10 ms of work in the route after each awaited write: 85 exchanges/s, against 
> about 670/s on main, because the routes of the connection run one at a time 
> on the single worker.
> Proposal: split the two jobs. The request outcomes go to a pool whose idle 
> threads end, and which starts a virtual thread for each task with virtual 
> threads. The reconnects run on a single-thread scheduled executor of the 
> connection. Neither executor is Milo's shared scheduled executor, so the 
> CAMEL-25713 guarantee stays.
> A cached pool for the request outcomes, as suggested in the review, does not 
> work with platform threads. When the connection is lost, every request in 
> flight fails, and each failure waits for the lock of the connection while the 
> first failure disconnects. With 4 producers sending writes that are not 
> awaited, and the server frozen for 30 s, a cached pool started about 4,080 
> threads, until the JVM could not create more (pthread_create failed, EAGAIN), 
> and the connection was never rebuilt. With platform threads, the pool 
> therefore keeps at most one thread per processor, as now, but its idle 
> threads end after the keep-alive time of the default thread pool profile.
> _Claude Code on behalf of etzel-mes_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to