Closed mmelko closed 5 years ago
@zregvart Do you want to take stab at this?
First thing to notice is that PostgreSQL is using all available memory:
There are some activities in the database:
syndesis=# select count(*) from jsondb where path like '/act%';
count
-------
1592
(1 row)
I've increased the memory limit to double the available memory to 512MB. After redeploy Postgresql is using 17MB and the activities can be seen in the UI.
After few minutes the memory usage is 467MB.
@mmelko how do I access -dev cluster ? Or can you provide the integration project for me to run locally would be good too.
@claudio4j you can access the test project that @mmelko has setup here:
Today activities load, they even load surprisingly fast (110-120msec). There are two possibilities that I'm considering:
We can increase the memory in the template. I'm worried about the quota limits we have on the evaluation cluster, and if I'm not mistaking the quota is 4GiB. Right now with todo and komodo enabled the maximum memory is 4382MiB. Without todo and komodo we're at 3102MiB. Each integration pod launched has a maximum of 512MiB by default.
I spoke to @zregvart and maybe it is a good idea to repeat the test setup with 256MB for the syndesis-db once more forcing the error to occur another time.
Once the error is there we should have a look at the logs and postgres state first. Then just restart the DB (without increasing the memory) to see if this restart only solved the problem (when #6054 is happening because of the restart we are doomed).
Then increase the memory to 512MB and restart the DB to see if this really solves the issue for now.
Related to https://github.com/syndesisio/syndesis/issues/5989 ?
We have this reproduced currently on rh-idev in the mmelko-test
project.
Here's what can be observed:
From postgres
container in syndesis-db
pod:
$ ps auxww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1016510+ 1 0.0 0.0 169760 11900 ? Ss Jul08 0:14 postgres
1016510+ 105 0.0 0.4 169876 69908 ? Ss Jul08 0:01 postgres: checkpointer process
1016510+ 106 0.0 0.4 169760 69676 ? Ss Jul08 0:18 postgres: writer process
1016510+ 107 0.0 0.0 169760 3688 ? Ss Jul08 0:04 postgres: wal writer process
1016510+ 108 0.0 0.1 170132 22808 ? Ss Jul08 0:04 postgres: autovacuum launcher process
1016510+ 109 0.0 0.0 95452 1924 ? Ss Jul08 0:33 postgres: stats collector process
1016510+ 116 0.0 0.0 171788 7724 ? Ss Jul08 0:00 postgres: syndesis syndesis ::1(50730) idle
1016510+ 6004 0.3 0.3 236264 49248 ? Ss 06:46 0:00 postgres: autovacuum worker process syndesis
1016510+ 6159 0.0 0.0 11820 1852 ? Ss 06:48 0:00 /bin/sh
1016510+ 6170 0.0 0.0 51744 1736 ? R+ 06:48 0:00 ps auxww
1016510+ 8455 0.0 0.4 171052 68344 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(38684) idle
1016510+ 8456 0.0 0.4 172128 74500 ? Ds Jul08 0:47 postgres: syndesis syndesis 10.1.0.1(38690) BIND
1016510+ 8457 0.0 0.4 172076 74544 ? Ss Jul08 0:49 postgres: syndesis syndesis 10.1.0.1(38692) BIND
1016510+ 8458 0.4 0.4 172208 74976 ? Ds Jul08 4:40 postgres: syndesis syndesis 10.1.0.1(38694) SELECT
1016510+ 8459 0.0 0.3 171764 50256 ? Ss Jul08 0:03 postgres: syndesis syndesis 10.1.0.1(38698) idle in transaction
1016510+ 8460 0.0 0.4 172196 74828 ? Ss Jul08 0:45 postgres: syndesis syndesis 10.1.0.1(38702) idle
1016510+ 8461 0.4 0.4 172764 75020 ? Ds Jul08 4:59 postgres: syndesis syndesis 10.1.0.1(38704) INSERT
1016510+ 8462 0.0 0.4 172380 74860 ? Ss Jul08 0:05 postgres: syndesis syndesis 10.1.0.1(38706) idle
1016510+ 8463 0.2 0.4 172604 75204 ? Ss Jul08 2:37 postgres: syndesis syndesis 10.1.0.1(38708) idle
1016510+ 8464 0.0 0.1 171780 23460 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(38710) idle in transaction
1016510+ 13270 0.0 0.4 170832 70096 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(53158) idle
1016510+ 13439 0.0 0.4 171052 67184 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(54908) idle
1016510+ 13702 0.0 0.0 170716 6884 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(57430) idle
The two connections in BIND
and the two connections taking great deal of time (4:40h and 4:59h) are in INSERT
and SELECT
.
This shows waiting=f (not locked) for all of those connections:
datid | datname | pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query_start | state_change | waiting | state | backend_xid | backend_xmin | query |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
16385 | syndesis | 116 | 16384 | syndesis | ::1 | 50730 | 2019-07-08 10:07:38.97224+00 | 2019-07-08 10:07:38.997467+00 | 2019-07-08 10:07:38.997698+00 | f | idle | SELECT * FROM pg_stat_database_conflicts; | |||||
16385 | syndesis | 8455 | 16384 | syndesis | 10.1.0.1 | 38684 | 2019-07-08 11:47:39.095637+00 | 2019-07-08 19:20:47.685455+00 | 2019-07-08 19:20:47.685462+00 | f | idle | COMMIT | |||||
16385 | syndesis | 8456 | 16384 | syndesis | 10.1.0.1 | 38690 | 2019-07-08 11:47:39.2171+00 | 2019-07-09 07:01:51.261447+00 | 2019-07-09 07:01:51.261634+00 | 2019-07-09 07:01:51.261634+00 | f | active | 19337 | select path,value,ovalue from jsondb where path LIKE $1 order by path ASC | |||
16385 | syndesis | 8457 | 16384 | syndesis | 10.1.0.1 | 38692 | 2019-07-08 11:47:39.223197+00 | 2019-07-09 07:01:52.167062+00 | 2019-07-09 07:01:52.16707+00 | f | idle | COMMIT | |||||
16385 | syndesis | 8458 | 16384 | syndesis | 10.1.0.1 | 38694 | 2019-07-08 11:47:39.289295+00 | 2019-07-09 07:01:13.705127+00 | 2019-07-09 07:01:13.705164+00 | 2019-07-09 07:01:13.705166+00 | f | active | 19337 | DELETE FROM jsondb WHERE path LIKE $1 AND path NOT IN (SELECT path FROM jsondb WHERE path LIKE $2 ORDER BY path DESC FETCH FIRST ($3) ROWS ONLY) | |||
16385 | syndesis | 8459 | 16384 | syndesis | 10.1.0.1 | 38698 | 2019-07-08 11:47:39.295275+00 | 2019-07-08 12:12:34.9347+00 | 2019-07-08 12:12:34.935954+00 | 2019-07-08 12:12:34.93751+00 | f | idle in transaction | 2053 | SELECT p.proname,p.oid FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' AND ( proname = 'lo_open' or proname = 'lo_close' or proname = 'lo_creat' or proname = 'lo_unlink' or proname = 'lo_lseek' or proname = 'lo_lseek64' or proname = 'lo_tell' or proname = 'lo_tell64' or proname = 'loread' or proname = 'lowrite' or proname = 'lo_truncate' or proname = 'lo_truncate64') | |||
16385 | syndesis | 8460 | 16384 | syndesis | 10.1.0.1 | 38702 | 2019-07-08 11:47:39.302807+00 | 2019-07-09 06:56:46.971158+00 | 2019-07-09 06:56:46.971166+00 | f | idle | COMMIT | |||||
16385 | syndesis | 8461 | 16384 | syndesis | 10.1.0.1 | 38704 | 2019-07-08 11:47:39.308545+00 | 2019-07-09 07:00:55.693691+00 | 2019-07-09 07:01:04.960529+00 | 2019-07-09 07:01:04.960529+00 | f | active | 19337 | 19337 | INSERT into jsondb (path, value, ovalue) values ($1, $2, $3) ON CONFLICT (path) DO UPDATE SET value = $4, ovalue = $5 | ||
16385 | syndesis | 8462 | 16384 | syndesis | 10.1.0.1 | 38706 | 2019-07-08 11:47:39.314264+00 | 2019-07-09 06:55:46.839088+00 | 2019-07-09 06:55:46.839096+00 | f | idle | COMMIT | |||||
16385 | syndesis | 8463 | 16384 | syndesis | 10.1.0.1 | 38708 | 2019-07-08 11:47:39.319878+00 | 2019-07-09 06:52:51.675959+00 | 2019-07-09 06:52:51.675964+00 | f | idle | COMMIT | |||||
16385 | syndesis | 8464 | 16384 | syndesis | 10.1.0.1 | 38710 | 2019-07-08 11:47:39.325438+00 | 2019-07-08 11:50:19.685162+00 | 2019-07-08 11:50:19.690007+00 | 2019-07-08 11:50:19.697077+00 | f | idle in transaction | 1021 | SELECT p.proname,p.oid FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' AND ( proname = 'lo_open' or proname = 'lo_close' or proname = 'lo_creat' or proname = 'lo_unlink' or proname = 'lo_lseek' or proname = 'lo_lseek64' or proname = 'lo_tell' or proname = 'lo_tell64' or proname = 'loread' or proname = 'lowrite' or proname = 'lo_truncate' or proname = 'lo_truncate64') | |||
16385 | syndesis | 7166 | 10 | postgres | 19336 | <insufficient privilege> | |||||||||||
16385 | syndesis | 13270 | 16384 | syndesis | 10.1.0.1 | 53158 | 2019-07-08 19:14:52.321318+00 | 2019-07-09 06:49:56.394386+00 | 2019-07-09 06:49:56.394393+00 | f | idle | COMMIT | |||||
16385 | syndesis | 13439 | 16384 | syndesis | 10.1.0.1 | 54908 | 2019-07-08 19:16:52.630924+00 | 2019-07-08 19:19:46.597692+00 | 2019-07-08 19:19:58.986476+00 | f | idle | select path,value,ovalue from jsondb where path LIKE $1 order by path ASC | |||||
16385 | syndesis | 13702 | 16384 | syndesis | 10.1.0.1 | 57430 | 2019-07-08 19:19:55.143315+00 | 2019-07-08 19:19:57.667168+00 | 2019-07-08 19:19:57.667225+00 | f | idle | COMMIT | |||||
16385 | syndesis | 6482 | 16384 | syndesis | psql | -1 | 2019-07-09 06:52:19.423434+00 | 2019-07-09 07:01:52.28866+00 | 2019-07-09 07:01:52.28866+00 | 2019-07-09 07:01:52.288663+00 | f | active | 19337 | select * from pg_stat_activity; |
(16 rows)
Thread dumps from the server pod:
$ jstack 1
2019-07-09 07:06:31
Full thread dump OpenJDK 64-Bit Server VM (25.151-b12 mixed mode):
"Attach Listener" #201 daemon prio=9 os_prio=0 tid=0x00007fc84c01ba10 nid=0x175 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Logs Controller [running], streaming: https://kubernetes.default.svc/api/v1/namespaces/mmelko-test/pods/i-first-guess-3-p4d5s/log?pretty=false&follow=true×tamps=true&sinceTime=2019-07-09T06:17:23.692151766Z" #199 prio=5 os_prio=0 tid=0x0000000001e73bf0 nid=0x15d waiting on condition [0x00007fc850084000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e925edc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingDeque.putLast(LinkedBlockingDeque.java:396)
at java.util.concurrent.LinkedBlockingDeque.put(LinkedBlockingDeque.java:649)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLine(PodLogMonitor.java:261)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLogStream(PodLogMonitor.java:152)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:128)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:51)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1.lambda$onResponse$0(KubernetesSupport.java:110)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1$$Lambda$347/1836573690.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Logs Controller [running], streaming: https://kubernetes.default.svc/api/v1/namespaces/mmelko-test/pods/i-provide-feedback-6-m9gnf/log?pretty=false&follow=true×tamps=true&sinceTime=2019-07-09T04:25:26.077473027Z" #197 prio=5 os_prio=0 tid=0x0000000001eb4fd0 nid=0x15b waiting on condition [0x00007fc8500f6000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e925edc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingDeque.putLast(LinkedBlockingDeque.java:396)
at java.util.concurrent.LinkedBlockingDeque.put(LinkedBlockingDeque.java:649)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLine(PodLogMonitor.java:261)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLogStream(PodLogMonitor.java:152)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:128)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:51)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1.lambda$onResponse$0(KubernetesSupport.java:110)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1$$Lambda$347/1836573690.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Logs Controller [running], streaming: https://kubernetes.default.svc/api/v1/namespaces/mmelko-test/pods/i-create-new-number-4-2ctzv/log?pretty=false&follow=true×tamps=true&sinceTime=2019-07-09T06:07:26.155247563Z" #195 prio=5 os_prio=0 tid=0x0000000001eb37d0 nid=0x159 waiting on condition [0x00007fc8600b4000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e925edc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingDeque.putLast(LinkedBlockingDeque.java:396)
at java.util.concurrent.LinkedBlockingDeque.put(LinkedBlockingDeque.java:649)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLine(PodLogMonitor.java:261)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLogStream(PodLogMonitor.java:152)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:128)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:51)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1.lambda$onResponse$0(KubernetesSupport.java:110)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1$$Lambda$347/1836573690.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Logs Controller [running], streaming: https://kubernetes.default.svc/api/v1/namespaces/mmelko-test/pods/i-stats-guess-1-785sx/log?pretty=false&follow=true×tamps=true&sinceTime=2019-07-09T04:18:35.530242062Z" #192 prio=5 os_prio=0 tid=0x0000000001e6f1c0 nid=0x156 waiting on condition [0x00007fc8500bd000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e925edc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingDeque.putLast(LinkedBlockingDeque.java:396)
at java.util.concurrent.LinkedBlockingDeque.put(LinkedBlockingDeque.java:649)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLine(PodLogMonitor.java:261)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.processLogStream(PodLogMonitor.java:152)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:128)
at io.syndesis.server.logging.jsondb.controller.PodLogMonitor.accept(PodLogMonitor.java:51)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1.lambda$onResponse$0(KubernetesSupport.java:110)
at io.syndesis.server.logging.jsondb.controller.KubernetesSupport$1$$Lambda$347/1836573690.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Okio Watchdog" #185 daemon prio=5 os_prio=0 tid=0x00007fc7ec0612c0 nid=0x14f in Object.wait() [0x00007fc805238000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:347)
at okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:312)
- locked <0x00000000e8c86980> (a java.lang.Class for okio.AsyncTimeout)
"XNIO-2 task-10" #83 prio=5 os_prio=0 tid=0x00007fc7f402aad0 nid=0xe9 waiting on condition [0x00007fc7e3ffe000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-9" #82 prio=5 os_prio=0 tid=0x00007fc7f402a1a0 nid=0xe8 waiting on condition [0x00007fc804331000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-8" #81 prio=5 os_prio=0 tid=0x00007fc7f4018bb0 nid=0xe7 waiting on condition [0x00007fc7e3efd000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-7" #80 prio=5 os_prio=0 tid=0x00007fc7f4018300 nid=0xe6 waiting on condition [0x00007fc7e3dfc000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-6" #79 prio=5 os_prio=0 tid=0x00007fc7f4194900 nid=0xe5 waiting on condition [0x00007fc7e24e9000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-5" #78 prio=5 os_prio=0 tid=0x00007fc7f41a86d0 nid=0xe4 waiting on condition [0x00007fc7e25ea000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-4" #77 prio=5 os_prio=0 tid=0x00007fc7f41a75c0 nid=0xe3 waiting on condition [0x00007fc7e26eb000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-3" #76 prio=5 os_prio=0 tid=0x00007fc7f4196950 nid=0xe2 waiting on condition [0x00007fc7e27ec000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-10" #75 prio=5 os_prio=0 tid=0x00007fc83005abc0 nid=0xe1 waiting on condition [0x00007fc7e28ed000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-2" #74 prio=5 os_prio=0 tid=0x00007fc7f4195a30 nid=0xe0 waiting on condition [0x00007fc7e29ee000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-9" #73 prio=5 os_prio=0 tid=0x00007fc830059460 nid=0xdf waiting on condition [0x00007fc7e2cef000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-8" #72 prio=5 os_prio=0 tid=0x00007fc830032470 nid=0xde waiting on condition [0x00007fc7e2df0000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-7" #71 prio=5 os_prio=0 tid=0x00007fc830031930 nid=0xdd waiting on condition [0x00007fc7e2ef1000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-6" #70 prio=5 os_prio=0 tid=0x00007fc830012420 nid=0xdc waiting on condition [0x00007fc7e31f2000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-5" #69 prio=5 os_prio=0 tid=0x00007fc8300108f0 nid=0xdb waiting on condition [0x00007fc7e32f3000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-4" #68 prio=5 os_prio=0 tid=0x00007fc83000f460 nid=0xda waiting on condition [0x00007fc7e33f4000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-3" #67 prio=5 os_prio=0 tid=0x00007fc83000e230 nid=0xd9 waiting on condition [0x00007fc7e34f5000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-2" #66 prio=5 os_prio=0 tid=0x00007fc830014400 nid=0xd8 waiting on condition [0x00007fc7e35f6000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-3 task-1" #65 prio=5 os_prio=0 tid=0x00007fc83000d690 nid=0xd7 waiting on condition [0x00007fc7e36f7000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ea07bc10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 task-1" #64 prio=5 os_prio=0 tid=0x00007fc7f412aee0 nid=0xd6 waiting on condition [0x00007fc7e37f8000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9c9bbb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"DestroyJavaVM" #63 prio=5 os_prio=0 tid=0x00007fc878009ef0 nid=0x98 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"XNIO-3 Accept" #61 prio=5 os_prio=0 tid=0x00007fc879173ae0 nid=0xd5 runnable [0x00007fc7e38f9000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000ea09df28> (a sun.nio.ch.Util$3)
- locked <0x00000000ea09df18> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000ea07cfb0> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"XNIO-3 I/O-2" #60 prio=5 os_prio=0 tid=0x00007fc8785b7050 nid=0xd4 runnable [0x00007fc7e39fa000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000ea07c300> (a sun.nio.ch.Util$3)
- locked <0x00000000ea07c2f0> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000ea07c1d8> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"XNIO-3 I/O-1" #59 prio=5 os_prio=0 tid=0x00007fc878ffcc20 nid=0xd3 runnable [0x00007fc7e3afb000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000ea07c9e8> (a sun.nio.ch.Util$3)
- locked <0x00000000ea07c9d8> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000ea07c8c0> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"OkHttp ConnectionPool" #53 daemon prio=5 os_prio=0 tid=0x00007fc814002380 nid=0xcd in Object.wait() [0x00007fc80412f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:460)
at okhttp3.ConnectionPool$1.run(ConnectionPool.java:67)
- locked <0x00000000e925ec78> (a okhttp3.ConnectionPool)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"XNIO-2 Accept" #46 prio=5 os_prio=0 tid=0x00007fc879065c50 nid=0xc6 runnable [0x00007fc804432000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e9cbea80> (a sun.nio.ch.Util$3)
- locked <0x00000000e9cbea70> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e9c9cf70> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"XNIO-2 I/O-2" #45 prio=5 os_prio=0 tid=0x00007fc878f0f3d0 nid=0xc5 runnable [0x00007fc804533000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e9c9c2b0> (a sun.nio.ch.Util$3)
- locked <0x00000000e9c9c2a0> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e9c9c188> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"XNIO-2 I/O-1" #44 prio=5 os_prio=0 tid=0x00007fc8785899a0 nid=0xc4 runnable [0x00007fc804634000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e9c9c9a0> (a sun.nio.ch.Util$3)
- locked <0x00000000e9c9c990> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e9c9c878> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"spring.cloud.inetutils" #43 daemon prio=5 os_prio=0 tid=0x00007fc878e74a40 nid=0xc3 waiting on condition [0x00007fc804935000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e95b4bd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Thread-17" #42 prio=5 os_prio=0 tid=0x00007fc878fe4290 nid=0xc2 waiting on condition [0x00007fc804c36000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e9674da8> (a java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at io.syndesis.server.update.controller.ResourceUpdateController.lambda$schedulerConfiguredFrom$3(ResourceUpdateController.java:154)
at io.syndesis.server.update.controller.ResourceUpdateController$$Lambda$250/448569108.get(Unknown Source)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
at java.lang.Thread.run(Thread.java:748)
"ResourceUpdateController (scheduler)" #41 prio=5 os_prio=0 tid=0x00007fc878f35810 nid=0xc1 waiting on condition [0x00007fc804d37000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e96630c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"pool-8-thread-1" #40 prio=5 os_prio=0 tid=0x00007fc878ed1ef0 nid=0xc0 waiting on condition [0x00007fc8501f7000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e92d26c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Logs Controller Scheduler [running]: cleanupLogs" #39 prio=5 os_prio=0 tid=0x00007fc8790b8e40 nid=0xbf runnable [0x00007fc86806a000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:140)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:109)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:67)
at org.postgresql.core.PGStream.receiveChar(PGStream.java:280)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1916)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:288)
- locked <0x00000000e82d9d90> (a org.postgresql.core.v3.QueryExecutorImpl)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:168)
at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:157)
at sun.reflect.GeneratedMethodAccessor123.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy165.execute(Unknown Source)
at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1327)
at org.skife.jdbi.v2.Update.execute(Update.java:56)
at org.skife.jdbi.v2.BasicHandle.update(BasicHandle.java:305)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController.lambda$deleteKeepingRetention$1(ActivityTrackingController.java:169)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController$$Lambda$539/1312585640.inTransaction(Unknown Source)
at org.skife.jdbi.v2.tweak.transactions.LocalTransactionHandler.inTransaction(LocalTransactionHandler.java:183)
at org.skife.jdbi.v2.BasicHandle.inTransaction(BasicHandle.java:338)
at org.skife.jdbi.v2.DBI$5.withHandle(DBI.java:350)
at org.skife.jdbi.v2.DBI.withHandle(DBI.java:298)
at org.skife.jdbi.v2.DBI.inTransaction(DBI.java:346)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController.deleteKeepingRetention(ActivityTrackingController.java:163)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController.cleanupLogs(ActivityTrackingController.java:145)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController$$Lambda$227/704387627.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Logs Controller [running]: processEventQueue" #38 prio=5 os_prio=0 tid=0x00007fc878ed10f0 nid=0xbe runnable [0x00007fc8680a3000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:140)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:109)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:67)
at org.postgresql.core.PGStream.receiveChar(PGStream.java:280)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1916)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:460)
- locked <0x00000000e82baff8> (a org.postgresql.core.v3.QueryExecutorImpl)
at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:793)
at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1659)
at sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy165.executeBatch(Unknown Source)
at org.skife.jdbi.v2.PreparedBatch.internalBatchExecute(PreparedBatch.java:196)
at org.skife.jdbi.v2.PreparedBatch.execute(PreparedBatch.java:100)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController.lambda$writeBatch$2(ActivityTrackingController.java:207)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController$$Lambda$532/1242313342.inTransaction(Unknown Source)
at org.skife.jdbi.v2.tweak.transactions.LocalTransactionHandler.inTransaction(LocalTransactionHandler.java:183)
at org.skife.jdbi.v2.BasicHandle.inTransaction(BasicHandle.java:338)
at org.skife.jdbi.v2.DBI$5.withHandle(DBI.java:350)
at org.skife.jdbi.v2.DBI.withHandle(DBI.java:298)
at org.skife.jdbi.v2.DBI.inTransaction(DBI.java:346)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController.writeBatch(ActivityTrackingController.java:174)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController.processEventQueue(ActivityTrackingController.java:403)
at io.syndesis.server.logging.jsondb.controller.ActivityTrackingController$$Lambda$224/666312528.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"OkHttp ConnectionPool" #36 daemon prio=5 os_prio=0 tid=0x00007fc7ec081e40 nid=0xbc in Object.wait() [0x00007fc805339000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:460)
at okhttp3.ConnectionPool$1.run(ConnectionPool.java:67)
- locked <0x00000000e86b48a8> (a okhttp3.ConnectionPool)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Endpoint Controller" #35 prio=5 os_prio=0 tid=0x00007fc879186bd0 nid=0xbb waiting on condition [0x00007fc80583a000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e89a2648> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Integration Controller Scheduler" #34 prio=5 os_prio=0 tid=0x00007fc7f4002e00 nid=0xba waiting on condition [0x00007fc80593b000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e89a1f50> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Integration Controller" #33 prio=5 os_prio=0 tid=0x00007fc7f40017e0 nid=0xb9 waiting on condition [0x00007fc805a3c000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e89a1638> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Integration Controller Scheduler" #32 prio=5 os_prio=0 tid=0x00007fc878c44470 nid=0xb8 waiting on condition [0x00007fc805b3d000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e89a1f50> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Tomcat JDBC Pool Cleaner[1282788025:1562586458994]" #30 daemon prio=5 os_prio=0 tid=0x00007fc878cd1320 nid=0xb6 in Object.wait() [0x00007fc8502f8000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000e8367fe0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Timer-0" #28 daemon prio=5 os_prio=0 tid=0x00007fc879224600 nid=0xb5 in Object.wait() [0x00007fc8505f9000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000e801d5b0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"jaeger.RemoteReporter-FlushTimer" #27 daemon prio=5 os_prio=0 tid=0x00007fc879241270 nid=0xb4 in Object.wait() [0x00007fc8508fa000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000e801e690> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"jaeger.RemoteReporter-QueueProcessor" #26 daemon prio=5 os_prio=0 tid=0x00007fc879169320 nid=0xb3 waiting on condition [0x00007fc8509fb000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e801eb18> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)
at io.jaegertracing.internal.reporters.RemoteReporter$QueueProcessor.run(RemoteReporter.java:170)
at java.lang.Thread.run(Thread.java:748)
"XNIO-1 Accept" #25 daemon prio=5 os_prio=0 tid=0x00007fc87844abf0 nid=0xb2 runnable [0x00007fc850afc000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e7f7c260> (a sun.nio.ch.Util$3)
- locked <0x00000000e7f7c250> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e7f7c128> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"XNIO-1 I/O-1" #24 daemon prio=5 os_prio=0 tid=0x00007fc87898ee50 nid=0xb1 runnable [0x00007fc850bfd000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e7f7cd50> (a sun.nio.ch.Util$3)
- locked <0x00000000e7f7cd40> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e7f7cc28> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)
"SimplePauseDetectorThread_0" #23 daemon prio=9 os_prio=0 tid=0x00007fc82c04f2e0 nid=0xb0 waiting on condition [0x00007fc8601b5000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:340)
at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)
at org.LatencyUtils.TimeServices.sleepNanos(TimeServices.java:62)
at org.LatencyUtils.SimplePauseDetector$SimplePauseDetectorThread.run(SimplePauseDetector.java:116)
"Thread-10" #22 daemon prio=9 os_prio=0 tid=0x00007fc82c049410 nid=0xaf waiting on condition [0x00007fc861cb6000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e7ed8288> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.LatencyUtils.PauseDetector$PauseDetectorThread.run(PauseDetector.java:85)
"Service Thread" #17 daemon prio=9 os_prio=0 tid=0x00007fc87826a530 nid=0xa9 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread1" #16 daemon prio=9 os_prio=0 tid=0x00007fc878237de0 nid=0xa8 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #15 daemon prio=9 os_prio=0 tid=0x00007fc87801bac0 nid=0xa7 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Thread-6" #14 daemon prio=5 os_prio=0 tid=0x00007fc830000a30 nid=0xa6 runnable [0x00007fc8622ba000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e708c870> (a sun.nio.ch.Util$3)
- locked <0x00000000e708c860> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e708c480> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:352)
at java.lang.Thread.run(Thread.java:748)
"server-timer" #12 daemon prio=5 os_prio=0 tid=0x00007fc8782161b0 nid=0xa4 in Object.wait() [0x00007fc8625bd000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000e708cd48> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Thread-4" #11 daemon prio=5 os_prio=0 tid=0x00007fc84808c1a0 nid=0xa3 runnable [0x00007fc862ad3000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000e709ec60> (a sun.nio.ch.Util$3)
- locked <0x00000000e709ec50> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e709eaa8> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:352)
at java.lang.Thread.run(Thread.java:748)
"Jolokia Agent Cleanup Thread" #10 daemon prio=5 os_prio=0 tid=0x00007fc84808ad40 nid=0xa2 in Object.wait() [0x00007fc8624bc000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1252)
- locked <0x00000000e89a1c58> (a java.lang.Thread)
at java.lang.Thread.join(Thread.java:1326)
at org.jolokia.jvmagent.CleanupThread.joinThreads(CleanupThread.java:110)
at org.jolokia.jvmagent.CleanupThread.run(CleanupThread.java:60)
"Thread-2" #8 daemon prio=5 os_prio=0 tid=0x00007fc848087230 nid=0xa0 runnable [0x00007fc8626be000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
- locked <0x00000000e709e8c0> (a java.net.PlainDatagramSocketImpl)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)
- locked <0x00000000e709e8c0> (a java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:812)
- locked <0x00000000e71cfd30> (a java.net.DatagramPacket)
- locked <0x00000000e709e870> (a java.net.MulticastSocket)
at org.jolokia.discovery.MulticastSocketListenerThread.receiveMessage(MulticastSocketListenerThread.java:114)
at org.jolokia.discovery.MulticastSocketListenerThread.run(MulticastSocketListenerThread.java:71)
"server-timer" #7 daemon prio=5 os_prio=0 tid=0x00007fc848070a20 nid=0x9f in Object.wait() [0x00007fc8627bf000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000e709f240> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007fc87811bac0 nid=0x9d runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007fc8780f30e0 nid=0x9c in Object.wait() [0x00007fc8630f7000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000000e71cfd58> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007fc8780eeef0 nid=0x9b in Object.wait() [0x00007fc8631f8000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000000e71cfdf0> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
"VM Thread" os_prio=0 tid=0x00007fc8780e5990 nid=0x9a runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007fc87801e960 nid=0x99 runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007fc87826c180 nid=0xaa waiting on condition
JNI global references: 1187
This bit of code is issuing the DELETE
:
And the INSERT
is from here:
$ ps auxww; echo "select a.pid, a.query, l.mode from pg_locks l join pg_stat_activity a on a.pid = l.pid where l.mode = 'ExclusiveLock' and a.usename = 'syndesis';" | psql -H -U postgres
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1016510+ 1 0.0 0.0 169760 11900 ? Ss Jul08 0:16 postgres
1016510+ 105 0.0 0.4 169876 69908 ? Ss Jul08 0:02 postgres: checkpointer process
1016510+ 106 0.0 0.4 169760 69676 ? Ss Jul08 0:20 postgres: writer process
1016510+ 107 0.0 0.0 169760 3688 ? Ss Jul08 0:04 postgres: wal writer process
1016510+ 108 0.0 0.1 170132 22808 ? Ss Jul08 0:04 postgres: autovacuum launcher process
1016510+ 109 0.0 0.0 95452 1924 ? Ss Jul08 0:38 postgres: stats collector process
1016510+ 116 0.0 0.0 171788 7724 ? Ss Jul08 0:00 postgres: syndesis syndesis ::1(50730) idle
1016510+ 6159 0.0 0.0 11820 1848 ? Ss 06:48 0:00 /bin/sh
1016510+ 6481 0.0 0.0 80488 3840 ? S+ 06:52 0:00 psql -U syndesis
1016510+ 6482 0.0 0.0 171824 9220 ? Ss 06:52 0:00 postgres: syndesis syndesis [local] idle
1016510+ 8175 0.0 0.0 11820 1912 ? Ss+ 07:12 0:00 /bin/sh
1016510+ 8455 0.0 0.4 171052 68344 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(38684) idle
1016510+ 8456 0.0 0.4 172128 74500 ? Ss Jul08 1:00 postgres: syndesis syndesis 10.1.0.1(38690) idle
1016510+ 8457 0.0 0.4 172076 74544 ? Ds Jul08 1:00 postgres: syndesis syndesis 10.1.0.1(38692) DELETE
1016510+ 8458 0.3 0.4 172208 74976 ? Ss Jul08 4:56 postgres: syndesis syndesis 10.1.0.1(38694) idle
1016510+ 8459 0.0 0.3 171764 50256 ? Ss Jul08 0:03 postgres: syndesis syndesis 10.1.0.1(38698) idle in transaction
1016510+ 8460 0.0 0.4 172196 74828 ? Ss Jul08 1:02 postgres: syndesis syndesis 10.1.0.1(38702) idle
1016510+ 8461 0.3 0.4 172764 75020 ? Ds Jul08 5:15 postgres: syndesis syndesis 10.1.0.1(38704) INSERT
1016510+ 8462 0.0 0.4 171020 73984 ? Ds Jul08 0:07 postgres: syndesis syndesis 10.1.0.1(38706) SELECT
1016510+ 8463 0.2 0.4 172604 75204 ? Ss Jul08 2:38 postgres: syndesis syndesis 10.1.0.1(38708) idle
1016510+ 8464 0.0 0.1 171780 23460 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(38710) idle in transaction
1016510+ 13270 0.0 0.4 170832 70096 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(53158) idle
1016510+ 13439 0.0 0.4 171052 67184 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(54908) idle
1016510+ 13702 0.0 0.0 170716 6884 ? Ss Jul08 0:00 postgres: syndesis syndesis 10.1.0.1(57430) idle
1016510+ 19522 0.0 0.0 11820 1860 ? Ss 09:28 0:00 /bin/sh
1016510+ 20717 0.5 0.0 236264 14384 ? Ds 09:42 0:00 postgres: autovacuum worker process syndesis
1016510+ 20743 0.0 0.0 51744 1732 ? R+ 09:42 0:00 ps auxww
pid | query | mode |
---|---|---|
8457 | DELETE FROM jsondb WHERE path LIKE $1 AND path NOT IN (SELECT path FROM jsondb WHERE path LIKE $2 ORDER BY path DESC FETCH FIRST ($3) ROWS ONLY) | ExclusiveLock |
8459 | SELECT p.proname,p.oid FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' AND ( proname = 'lo_open' or proname = 'lo_close' or proname = 'lo_creat' or proname = 'lo_unlink' or proname = 'lo_lseek' or proname = 'lo_lseek64' or proname = 'lo_tell' or proname = 'lo_tell64' or proname = 'loread' or proname = 'lowrite' or proname = 'lo_truncate' or proname = 'lo_truncate64') | ExclusiveLock |
8461 | INSERT into jsondb (path, value, ovalue) values ($1, $2, $3) ON CONFLICT (path) DO UPDATE SET value = $4, ovalue = $5 | ExclusiveLock |
8461 | INSERT into jsondb (path, value, ovalue) values ($1, $2, $3) ON CONFLICT (path) DO UPDATE SET value = $4, ovalue = $5 | ExclusiveLock |
8462 | select path,value,ovalue from jsondb where path LIKE $1 order by path DESC | ExclusiveLock |
8464 | SELECT p.proname,p.oid FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' AND ( proname = 'lo_open' or proname = 'lo_close' or proname = 'lo_creat' or proname = 'lo_unlink' or proname = 'lo_lseek' or proname = 'lo_lseek64' or proname = 'lo_tell' or proname = 'lo_tell64' or proname = 'loread' or proname = 'lowrite' or proname = 'lo_truncate' or proname = 'lo_truncate64') | ExclusiveLock |
(6 rows)
This shows that two pids (8457
and 8461
) have ExclusiveLock
, probably over the same row.
My current thinking is that we could add FOR UPDATE SKIP LOCKED
to the inner SELECT
of the DELETE
statement.
@mmelko I can do an experiment in building a custom version of Syndesis 1.7.x
with that FOR UPDATE SKIP LOCKED
and deploy it to the rh-idev
cluster in a new project. Can you run the tests against it to confirm if it solves the issue?
Actually because of the NOT IN
we don't want to skip over the locked rows, those might be locked by an INSERT
and should not be deleted.
This caught my eye, from the database log:
2019-07-09 13:30:08 UTC 00000 5d2495d5.1b21 LOG: automatic vacuum of table "syndesis.public.jsondb": index scans: 0
pages: 0 removed, 43298 remain, 980 skipped due to pins
tuples: 0 removed, 575705 remain, 526219 are dead but not yet removable
buffer usage: 51779 hits, 45521 misses, 5 dirtied
avg read rate: 1.333 MB/s, avg write rate: 0.000 MB/s
system usage: CPU 0.36s/0.17u sec elapsed 266.74 sec
I've tried vacuuming the jsondb
table manually:
syndesis=> vacuum verbose jsondb;
INFO: vacuuming "public.jsondb"
INFO: index "jsondb_pkey" now contains 545824 row versions in 11646 pages
DETAIL: 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.06s/0.02u sec elapsed 22.24 sec.
INFO: index "jsondb_idx" now contains 374 row versions in 7 pages
DETAIL: 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.04 sec.
INFO: "jsondb": found 0 removable, 574779 nonremovable row versions in 43271 out of 43406 pages
DETAIL: 541225 dead row versions cannot be removed yet.
There were 11502 unused item pointers.
Skipped 135 pages due to buffer pins.
0 pages are entirely empty.
CPU 0.32s/0.15u sec elapsed 63.15 sec.
INFO: vacuuming "pg_toast.pg_toast_16436"
INFO: index "pg_toast_16436_index" now contains 117 row versions in 2 pages
DETAIL: 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO: "pg_toast_16436": found 0 removable, 0 nonremovable row versions in 0 out of 51 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
Skipped 0 pages due to buffer pins.
0 pages are entirely empty.
CPU 0.00s/0.00u sec elapsed 0.02 sec.
VACUUM
I think that high number of non-removable rows (574779) is causing queries to run slow, so the inner SELECT
for the DELETE
is causing the ExclusiveLock
which prevents the INSERT
, or the other way around the ExclusiveLock
created by the INSERT
(that's slow) is preventing the DELETE
from finishing.
According to:
SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum
FROM pg_stat_all_tables
WHERE relname = 'jsondb'
ORDER BY n_dead_tup
/ (n_live_tup
* current_setting('autovacuum_vacuum_scale_factor')::float8
+ current_setting('autovacuum_vacuum_threshold')::float8)
schemaname | relname | n_live_tup | n_dead_tup | last_autovacuum |
---|---|---|---|---|
public | jsondb | 34647 | 543113 | 2019-07-09 13:44:53.064172+00 |
(1 row)
The autovacuum is getting triggered but there are still a great number of dead tuples.
Seems that the ORDER by PATH DESC
is where we loose the most performance.
Without it:
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%';
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan using jsondb_pkey on jsondb (cost=0.55..8.57 rows=5847 width=119) (actual time=97334.348..97920.892 rows=758 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%'::text)
Heap Fetches: 112569
Planning time: 739.563 ms
Execution time: 97920.976 ms
(6 rows)
With it: never finishes (I get kicked out of oc rsh
, could be due to a timeout or OOM killer):
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%' ORDER BY path DESC;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan Backward using jsondb_pkey on jsondb (cost=0.55..8.57 rows=5843 width=119) (actual time=529.474..612900.143 rows=758 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%'::text)
Heap Fetches: 112569
Planning time: 259.770 ms
Execution time: 612900.246 ms
(6 rows)
I'm considering adding a sorted index based on a substring of the path column just for activity entry id, if such a thing is possible in PostgreSQL.
What's the order by path ... fetch first N
doing? Why is it there?
I've created an index:
CREATE INDEX CONCURRENTLY jsondb_activity_idx ON jsondb (path DESC) WHERE path LIKE '/activity/exchanges/%';
I'm not 100% on the WHERE path LIKE ...
bit, and how it'll influence the planner to choose to use this index or not.
I've scaled syndesis-server
down in order to run VACUUM ANALYSE jsondb
, now there are far less dead tuples:
schemaname | relname | n_live_tup | n_dead_tup | last_autovacuum |
---|---|---|---|---|
public | jsondb | 58961 | 170 | 2019-07-09 14:49:19.88409+00 |
(1 row)
With this I can see the activities in the UI, I think we need to let it cook a bit and check back in 12 or so hours to see if the number of dead tuples keeps increasing or the queries take long time.
What's the
order by path ... fetch first N
doing? Why is it there?
That query deletes all but the last 50 activity entries for a integration.
The SELECT
selects the last 50 entries, the DELETE
deletes all but those. There are no joins supported in DELETE
that's why we need NOT IN
.
I'm actually quite certain that the newly created index won't help. I'll try to redefine the index without the WHERE path LIKE...
part.
Seems that the planner is using the jsondb_pkey
index intermittently, and the jsondb_activity_idx
only for exact WHERE path LIKE...
condition.
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%' ORDER BY path DESC;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan Backward using jsondb_pkey on jsondb (cost=0.54..8.56 rows=3 width=121) (actual time=0.063..0.100 rows=50 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%'::text)
Heap Fetches: 0
Planning time: 1.186 ms
Execution time: 0.140 ms
(6 rows)
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/%' ORDER BY path DESC;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan Backward using jsondb_pkey on jsondb (cost=0.54..8.56 rows=308 width=121) (actual time=0.043..1.043 rows=1146 loops=1)
Index Cond: ((path >= '/activity/exchanges/'::text) AND (path < '/activity/exchanges0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/%'::text)
Heap Fetches: 863
Planning time: 0.382 ms
Execution time: 1.102 ms
(6 rows)
syndesis=> \d jsondb
Table "public.jsondb"
Column | Type | Modifiers
--------+-------------------+--------------------
path | character varying | collate C not null
value | character varying |
ovalue | character varying |
idx | character varying | collate C
Indexes:
"jsondb_pkey" PRIMARY KEY, btree (path)
"jsondb_activity_idx" btree (path DESC) WHERE path::text ~~ '/activity/exchanges/%'::text
"jsondb_idx" btree (idx, value) WHERE idx IS NOT NULL
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/%' ORDER BY path DESC;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan using jsondb_activity_idx on jsondb (cost=0.40..8.42 rows=950 width=119) (actual time=0.026..0.645 rows=1283 loops=1)
Index Cond: ((path >= '/activity/exchanges/'::text) AND (path < '/activity/exchanges0'::text))
Heap Fetches: 1000
Planning time: 0.422 ms
Execution time: 0.696 ms
(5 rows)
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/%' ORDER BY path DESC;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan using jsondb_activity_idx on jsondb (cost=0.40..8.42 rows=950 width=119) (actual time=0.013..0.482 rows=1314 loops=1)
Index Cond: ((path >= '/activity/exchanges/'::text) AND (path < '/activity/exchanges0'::text))
Heap Fetches: 1031
Planning time: 0.361 ms
Execution time: 0.542 ms
(5 rows)
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%' ORDER BY path DESC;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan Backward using jsondb_pkey on jsondb (cost=0.54..8.56 rows=3 width=119) (actual time=0.020..0.041 rows=50 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%'::text)
Heap Fetches: 0
Planning time: 0.220 ms
Execution time: 0.053 ms
(6 rows)
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%' ORDER BY path DESC;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan Backward using jsondb_pkey on jsondb (cost=0.54..8.56 rows=3 width=119) (actual time=0.022..0.034 rows=50 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%'::text)
Heap Fetches: 0
Planning time: 0.238 ms
Execution time: 0.050 ms
(6 rows)
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%' ORDER BY path DESC;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan Backward using jsondb_pkey on jsondb (cost=0.54..8.56 rows=3 width=119) (actual time=0.020..0.041 rows=50 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz/%'::text)
Heap Fetches: 0
Planning time: 0.231 ms
Execution time: 0.056 ms
(6 rows)
syndesis=> explain analyse select path from jsondb where path like '/activity/exchanges/%' ORDER BY path DESC;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan using jsondb_activity_idx on jsondb (cost=0.40..8.42 rows=950 width=119) (actual time=0.019..0.799 rows=1378 loops=1)
Index Cond: ((path >= '/activity/exchanges/'::text) AND (path < '/activity/exchanges0'::text))
Heap Fetches: 1095
Planning time: 0.515 ms
Execution time: 0.882 ms
(5 rows)
The new index is:
CREATE INDEX CONCURRENTLY jsondb_activity_idx ON jsondb (path DESC);
And it results in this execution plan:
syndesis=> explain analyse DELETE FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0/%' AND path NOT IN (SELECT path FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0/%' ORDER BY path DESC FETCH FIRST (50) ROWS ONLY);
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete on jsondb (cost=8.85..16.88 rows=2 width=6) (actual time=0.013..0.013 rows=0 loops=1)
-> Index Scan using jsondb_activity_idx on jsondb (cost=8.85..16.88 rows=2 width=6) (actual time=0.009..0.009 rows=0 loops=1)
Index Cond: (((path)::text >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0/'::text) AND ((path)::text < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz00'::text))
Filter: (((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0/%'::text) AND (NOT (hashed SubPlan 1)))
SubPlan 1
-> Limit (cost=0.41..8.43 rows=3 width=118) (never executed)
-> Index Only Scan using jsondb_activity_idx on jsondb jsondb_1 (cost=0.41..8.43 rows=3 width=118) (never executed)
Index Cond: ((path >= '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0/'::text) AND (path < '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz00'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGC-0XNPX6fkTQoWYDz0/%'::text)
Heap Fetches: 0
Planning time: 0.543 ms
Execution time: 0.042 ms
(12 rows)
The index is now used. I think to be certain that there are no deadlocks we need to restructure the DELETE
query, perhaps using WITH
and either UNCOMMITED READ
(not sure it's supported on PostgresSQL) or SKIP LOCKED
.
I've considered using OIDs as criteria instead of the path column:
syndesis=> ALTER TABLE jsondb SET WITH OIDS;
ALTER TABLE
This performs worse:
syndesis=> explain analyse DELETE FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' AND oid NOT IN (SELECT oid FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' ORDER BY path DESC FETCH FIRST (50) ROWS ONLY);
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete on jsondb (cost=2.07..10.10 rows=179 width=6) (actual time=1.192..1.192 rows=0 loops=1)
-> Index Scan using jsondb_activity_idx on jsondb (cost=2.07..10.10 rows=179 width=6) (actual time=0.157..0.835 rows=452 loops=1)
Index Cond: (((path)::text >= '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/'::text) AND ((path)::text < '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz0'::text))
Filter: (((path)::text ~~ '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%'::text) AND (NOT (hashed SubPlan 1)))
Rows Removed by Filter: 50
SubPlan 1
-> Limit (cost=0.41..1.53 rows=50 width=117) (actual time=0.012..0.074 rows=50 loops=1)
-> Index Scan using jsondb_activity_idx on jsondb jsondb_1 (cost=0.41..8.44 rows=359 width=117) (actual time=0.012..0.067 rows=50 loops=1)
Index Cond: (((path)::text >= '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/'::text) AND ((path)::text < '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%'::text)
Planning time: 0.868 ms
Execution time: 1.234 ms
(12 rows)
syndesis=> explain analyse DELETE FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' AND path NOT IN (SELECT path FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' ORDER BY path DESC FETCH FIRST (50) ROWS ONLY);
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete on jsondb (cost=2.07..10.10 rows=179 width=6) (actual time=0.764..0.764 rows=0 loops=1)
-> Index Scan using jsondb_activity_idx on jsondb (cost=2.07..10.10 rows=179 width=6) (actual time=0.148..0.719 rows=63 loops=1)
Index Cond: (((path)::text >= '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/'::text) AND ((path)::text < '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz0'::text))
Filter: (((path)::text ~~ '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%'::text) AND (NOT (hashed SubPlan 1)))
Rows Removed by Filter: 50
SubPlan 1
-> Limit (cost=0.41..1.53 rows=50 width=113) (actual time=0.038..0.084 rows=50 loops=1)
-> Index Only Scan using jsondb_activity_idx on jsondb jsondb_1 (cost=0.41..8.44 rows=359 width=113) (actual time=0.037..0.078 rows=50 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/'::text) AND (path < '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%'::text)
Heap Fetches: 50
Planning time: 0.657 ms
Execution time: 0.805 ms
(13 rows)
WITH variant:
syndesis=> explain analyse WITH d AS (SELECT oid FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' ORDER BY path DESC OFFSET 50 ROWS) DELETE FROM jsondb WHERE oid IN (SELECT oid FROM d);
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete on jsondb (cost=162.38..2984.76 rows=20704 width=34) (actual time=43.823..43.823 rows=0 loops=1)
CTE d
-> Limit (cost=0.47..8.44 rows=6642 width=111) (actual time=0.068..7.874 rows=6941 loops=1)
-> Index Scan using jsondb_activity_idx on jsondb jsondb_1 (cost=0.41..8.44 rows=6692 width=111) (actual time=0.021..7.384 rows=6991 loops=1)
Index Cond: (((path)::text >= '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/'::text) AND ((path)::text < '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%'::text)
-> Hash Join (cost=153.94..2976.32 rows=20704 width=34) (actual time=18.690..31.731 rows=6941 loops=1)
Hash Cond: (jsondb.oid = d.oid)
-> Seq Scan on jsondb (cost=0.00..2665.09 rows=41409 width=10) (actual time=0.038..11.274 rows=41378 loops=1)
-> Hash (cost=151.44..151.44 rows=200 width=32) (actual time=14.740..14.740 rows=6941 loops=1)
Buckets: 8192 (originally 1024) Batches: 1 (originally 1) Memory Usage: 553kB
-> HashAggregate (cost=149.44..151.44 rows=200 width=32) (actual time=12.677..13.631 rows=6941 loops=1)
Group Key: d.oid
-> CTE Scan on d (cost=0.00..132.84 rows=6642 width=32) (actual time=0.076..10.760 rows=6941 loops=1)
Planning time: 0.568 ms
Execution time: 44.029 ms
(16 rows)
syndesis=> explain analyse WITH d AS (SELECT path FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' ORDER BY path DESC OFFSET 50 ROWS) DELETE FROM jsondb WHERE path IN (SELECT path FROM d);
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete on jsondb (cost=8.87..16.91 rows=1 width=62) (actual time=0.816..0.816 rows=0 loops=1)
CTE d
-> Limit (cost=8.44..8.44 rows=1 width=115) (actual time=0.094..0.205 rows=98 loops=1)
-> Index Only Scan using jsondb_activity_idx on jsondb jsondb_1 (cost=0.41..8.44 rows=3 width=115) (actual time=0.032..0.198 rows=148 loops=1)
Index Cond: ((path >= '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/'::text) AND (path < '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz0'::text))
Filter: ((path)::text ~~ '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%'::text)
Heap Fetches: 99
-> Nested Loop (cost=0.44..8.47 rows=1 width=62) (actual time=0.324..0.686 rows=98 loops=1)
-> HashAggregate (cost=0.02..0.03 rows=1 width=88) (actual time=0.313..0.329 rows=98 loops=1)
Group Key: (d.path)::text
-> CTE Scan on d (cost=0.00..0.02 rows=1 width=88) (actual time=0.099..0.259 rows=98 loops=1)
-> Index Scan using jsondb_activity_idx on jsondb (cost=0.41..8.43 rows=1 width=121) (actual time=0.003..0.003 rows=1 loops=98)
Index Cond: ((path)::text = (d.path)::text)
Planning time: 0.754 ms
Execution time: 0.869 ms
(15 rows)
I think I'm settling on two chages:
jsondb_activity_idx
index as: CREATE INDEX CONCURRENTLY jsondb_activity_idx ON jsondb (path DESC);
DELETE
to: WITH d AS (SELECT path FROM jsondb WHERE path LIKE '/activity/exchanges/i-LjGDJG5NPX6fkTQoWYHz/%' ORDER BY path DESC FOR KEY SHARE SKIP LOCKED OFFSET 50 ROWS) DELETE FROM jsondb WHERE path IN (SELECT path FROM d)
Thanks for the thorough investigation @zregvart. Changing the sql statements and redoing the load tests seems to safe, right?
We had a test running over night just with the index added and the jsondb
table VACUUM ANALYSE
d, the same instance that has had the big number of dead tuples in https://github.com/syndesisio/syndesis/issues/6052#issuecomment-509649507.
I'm inclined to just add the index as the only code change and leave the queries as is.
@mmelko Did you get a chance to verify of the improvement help (at least to a degree that we can lower the priority of this ticket?)
Last test @mmelko performed was on 1.7.10
(perhaps @mmelko you can fill in the details of the test here), today after one day of running the test fetch of activities is failing with 504 Gateway timeout
.
I've performed this maintenance on the installation:
# check to see if there are dead tuples (not vacuumed)
$ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum FROM pg_stat_all_tables WHERE relname = \'jsondb\'|psql -U syndesis"
schemaname | relname | n_live_tup | n_dead_tup | last_autovacuum
------------+---------+------------+------------+-------------------------------
public | jsondb | 26893 | 491210 | 2019-07-17 09:26:51.264029+00
(1 row)
# since there are 491210 dead tuples, performed the following
# scaled down the server
$ oc scale --replicas=0 dc syndesis-server
# terminated all running connections
$ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo SELECT pg_terminate_backend\(a.pid\) FROM pg_locks l join pg_stat_activity a ON a.pid = l.pid WHERE l.mode = \'ExclusiveLock\' AND a.usename = \'syndesis\'|psql -U syndesis"
FATAL: terminating connection due to administrator command
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost
command terminated with exit code 2
# the above FATAL output is expected the statement also closes the connection psql is using
# executed `VACUUM FULL ANALYSE`
$ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo VACUUM FULL ANALYSE jsondb|psql -U syndesis"
VACUUM
# scaled up server
$ oc scale --replicas=1 dc syndesis-server
With this the activities are being fetched again. We can wait another day and see if this preventative maintenance is needed again tomorrow or it somehow fixes the issue, as it has, perplexingly/seemingly , fixed on this issue on an instance running 1.7.8
If this indeed seems to help, perhaps we can lower the priority of this as there is a possible workaround: performing the above maintenance.
@mmelko do you think we can lower the priority with the maintenance steps outlined in https://github.com/syndesisio/syndesis/issues/6052#issuecomment-512181486?
My argument is that if this can be accepted as a workaround and we document it as a known limitation then we can address this issue in the activity tracking redesign planned for the next release.
@zregvart I'd rather keep this as p0. I'd still to document it as know limitation. But compared to other p1's this is still more serious and will have bigger impact on some potential enterprise deployments.
@zregvart Can you work with @TovaCohen on the release notes?
Tracked downstream: https://issues.jboss.org/browse/FUSEDOC-3376
Migrated to https://issues.jboss.org/browse/ENTESB-11407
See also https://issues.jboss.org/browse/ENTESB-11407
This is a...
Description
After putting some small load (~3 messages /s ) for couple of hours no activities are listed in integrations. I hit this also on i-dev cluster and openshift pro.
GET https://syndesis-test.b6ff.rh-idev.openshiftapps.com/api/v1/activity/integrations/i-LilthRWl7ZNNJJhTBQNz
results in504 Gateway timeout
. Looks like connection to DB is really slow.There is
syndesis-test
project on i-dev cluster that can be used for investigation.