Hi all, I'm just wondering does ktor server use `h...
# ktor
h
Hi all, I'm just wondering does ktor server use
httpclient
for its operations. I did a thread dump and found a bunches of
httpclient
threads:
Copy code
"httpclient-main-1" #35 daemon prio=5 os_prio=31 cpu=116.48ms elapsed=429.33s tid=0x0000000156a80600 nid=0x9003 waiting on condition  [0x000000016ff2e000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@17.0.13/Native Method)
        - parking to wait for  <0x00000005c0809d68> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@17.0.13/LockSupport.java:341)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.13/AbstractQueuedSynchronizer.java:506)
        at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.13/ForkJoinPool.java:3465)
        at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.13/ForkJoinPool.java:3436)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.13/AbstractQueuedSynchronizer.java:1630)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@17.0.13/LinkedBlockingQueue.java:435)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@17.0.13/ThreadPoolExecutor.java:1062)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.13/ThreadPoolExecutor.java:1122)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.13/ThreadPoolExecutor.java:635)
        at java.lang.Thread.run(java.base@17.0.13/Thread.java:840)

"httpclient-dispatch-1" #23 daemon prio=5 os_prio=31 cpu=102.47ms elapsed=429.33s tid=0x0000000157123400 nid=0x9303 runnable  [0x0000000310206000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.KQueue.poll(java.base@17.0.13/Native Method)
        at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@17.0.13/KQueueSelectorImpl.java:122)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@17.0.13/SelectorImpl.java:129)
        - locked <0x00000005c08090f8> (a sun.nio.ch.Util$2)
        - locked <0x00000005c0809020> (a sun.nio.ch.KQueueSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(java.base@17.0.13/SelectorImpl.java:141)
        at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:113)
        at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:86)
        at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)
        at java.lang.Thread.run(java.base@17.0.13/Thread.java:840)

"httpclient-dispatch-2" #24 daemon prio=5 os_prio=31 cpu=143.87ms elapsed=429.33s tid=0x00000001600a3600 nid=0xaa03 runnable  [0x0000000310412000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.KQueue.poll(java.base@17.0.13/Native Method)
        at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@17.0.13/KQueueSelectorImpl.java:122)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@17.0.13/SelectorImpl.java:129)
        - locked <0x00000005c080a088> (a sun.nio.ch.Util$2)
        - locked <0x00000005c080a030> (a sun.nio.ch.KQueueSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(java.base@17.0.13/SelectorImpl.java:141)
        at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:113)
        at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:86)
        at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)
        at java.lang.Thread.run(java.base@17.0.13/Thread.java:840)

"httpclient-dispatch-3" #25 daemon prio=5 os_prio=31 cpu=148.23ms elapsed=429.33s tid=0x00000001473f2600 nid=0xac03 runnable  [0x000000031061e000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.KQueue.poll(java.base@17.0.13/Native Method)
        at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@17.0.13/KQueueSelectorImpl.java:122)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@17.0.13/SelectorImpl.java:129)
        - locked <0x00000005c08093e0> (a sun.nio.ch.Util$2)
        - locked <0x00000005c0809388> (a sun.nio.ch.KQueueSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(java.base@17.0.13/SelectorImpl.java:141)
        at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:113)
        at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:86)
        at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)
        at java.lang.Thread.run(java.base@17.0.13/Thread.java:840)

"httpclient-dispatch-4" #26 daemon prio=5 os_prio=31 cpu=153.48ms elapsed=429.33s tid=0x00000001473fa000 nid=0xad03 runnable  [0x000000031082a000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.KQueue.poll(java.base@17.0.13/Native Method)
        at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@17.0.13/KQueueSelectorImpl.java:122)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@17.0.13/SelectorImpl.java:129)
        - locked <0x00000005c080a490> (a sun.nio.ch.Util$2)
        - locked <0x00000005c080a360> (a sun.nio.ch.KQueueSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(java.base@17.0.13/SelectorImpl.java:141)
        at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:113)
        at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:86)
        at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)
        at java.lang.Thread.run(java.base@17.0.13/Thread.java:840)
here are my dependencies btw:
Copy code
dependencies {
    implementation("io.ktor:ktor-network-tls-jvm")
    implementation("io.ktor:ktor-server-cors-jvm")
    implementation("io.ktor:ktor-serialization-kotlinx-json")
    implementation("io.ktor:ktor-server-content-negotiation")
    implementation("io.ktor:ktor-server-core-jvm")
    implementation("io.ktor:ktor-server-sessions-jvm")
    implementation("io.ktor:ktor-server-csrf-jvm")
    implementation("io.ktor:ktor-server-auth-jvm")
    implementation("io.ktor:ktor-server-netty-jvm")
    implementation("io.ktor:ktor-server-cors")
    implementation("com.zaxxer:HikariCP:6.2.1")
    implementation("org.postgresql:postgresql:42.7.4")
    implementation("io.ktor:ktor-server-call-logging")
    implementation("ch.qos.logback:logback-classic:$logback_version")
    implementation("io.ktor:ktor-server-config-yaml-jvm")
    implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")
    implementation("com.google.firebase:firebase-admin:9.4.1")
    testImplementation("io.ktor:ktor-server-test-host-jvm")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
}
Thanks in advance y'all
🧵 2
a
The Ktor server definitely doesn't use an HTTP client for its core operations. I suggest checking if your other project's dependencies call the Apache HTTP client.
h
@Aleksei Tirman [JB] Will do!