- Версия Dolphinscheduler; 3.2.0, и он автономный, а не кластерный, не работает на docker или k8s, И ЭТО ПРОД
Код: Выделить всё
*
[user@user ~]$ free -h
total used free shared buff/cache available
Mem: 192Gi 64Gi 105Gi 2.4Gi 23Gi 124Gi
Swap: 8.0Gi 0B 8.0Gi
Код: Выделить всё
*
[user@user ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 97G 0 97G 0% /dev
tmpfs 97G 1.1M 97G 1% /dev/shm
tmpfs 97G 2.3G 94G 3% /run
tmpfs 97G 0 97G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 202G 16G 187G 8% /
/dev/mapper/rhel-usr 10G 5.3G 4.8G 53% /usr
/dev/mapper/vgdata-lvdata 400G 20G 381G 5% /data
/dev/sda2 2.0G 439M 1.6G 22% /boot
/dev/sda1 2.0G 5.9M 2.0G 1% /boot/efi
tmpfs 20G 0 20G 0% /run/user/1007
tmpfs 20G 8.0K 20G 1% /run/user/1006
Код: Выделить всё
*
[user@user ~]$ java --version
openjdk 11.0.24 2024-07-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.24.0.8-2) (build 11.0.24+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.24.0.8-2) (build 11.0.24+8-LTS, mixed mode, sharing)
- Jvm_args_env.sh главного и рабочего сервера;
Код: Выделить всё
*
[root@user bin]# cat /data/dolphin/master-server/bin/jvm_args_env.sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-Xms32g
-Xmx32g
-Xmn16g
-XX:+IgnoreUnrecognizedVMOptions
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-Xloggc:gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=dump.hprof
-Duser.timezone=${SPRING_JACKSON_TIME_ZONE}
[root@user bin]# cat /data/dolphin/worker-server/bin/jvm_args_env.sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-Xms32g
-Xmx32g
-Xmn16g
-XX:+IgnoreUnrecognizedVMOptions
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-Xloggc:gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=dump.hprof
-Duser.timezone=${SPRING_JACKSON_TIME_ZONE}
- Теперь я предоставлю два журнала с главного сервера и рабочего сервера;
Код: Выделить всё
First one is master-server's log:
Код: Выделить всё
[WARN] 2025-10-02 09:01:26.576 +0300 org.apache.dolphinscheduler.remote.NettyRemotingClient:[321] - [WorkflowInstance-0][TaskInstance-0] - connect to Host(ip=10.200.109.63, port=1234) error
io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: /10.200.109.63:1234
Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
at io.netty.channel.unix.Errors.throwConnectException(Errors.java:124)
at io.netty.channel.unix.Socket.finishConnect(Socket.java:251)
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:673)
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:650)
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:530)
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:465)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.base/java.lang.Thread.run(Thread.java:829)
[ERROR] 2025-10-02 09:01:26.576 +0300 org.apache.dolphinscheduler.server.master.runner.GlobalTaskDispatchWaitingQueueLooper:[87] - [WorkflowInstance-0][TaskInstance-0] - Dispatch task failed
org.apache.dolphinscheduler.server.master.exception.TaskDispatchException: Dispatch task to 10.200.109.63:1234 failed
at org.apache.dolphinscheduler.server.master.runner.BaseTaskDispatcher.doDispatch(BaseTaskDispatcher.java:101)
at org.apache.dolphinscheduler.server.master.runner.BaseTaskDispatcher.dispatchTask(BaseTaskDispatcher.java:74)
at org.apache.dolphinscheduler.server.master.runner.GlobalTaskDispatchWaitingQueueLooper.run(GlobalTaskDispatchWaitingQueueLooper.java:79)
Caused by: org.apache.dolphinscheduler.remote.exceptions.RemotingException: connect to : Host(ip=10.200.109.63, port=1234) fail
at org.apache.dolphinscheduler.remote.NettyRemotingClient.sendSync(NettyRemotingClient.java:210)
at org.apache.dolphinscheduler.server.master.rpc.MasterRpcClient.sendSyncCommand(MasterRpcClient.java:49)
at org.apache.dolphinscheduler.server.master.runner.BaseTaskDispatcher.doDispatch(BaseTaskDispatcher.java:87)
... 2 common frames omitted
Код: Выделить всё
Second one is worker-server's log:
Код: Выделить всё
[INFO] 2025-10-02 09:01:25.764 +0300 org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable:[289] - [WorkflowInstance-59856][TaskInstance-507499] - The current execute mode isn't develop mode, will clear the task execute file: /data/dolphin/exec/process/default/15236034355840/15257910743307_11/59856/507499
[INFO] 2025-10-02 09:01:25.765 +0300 org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable:[304] - [WorkflowInstance-59856][TaskInstance-507499] - Success clear the task execute file: /data/dolphin/exec/process/default/15236034355840/15257910743307_11/59856/507499
[INFO] 2025-10-02 09:01:25.765 +0300 org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable:[330] - [WorkflowInstance-59856][TaskInstance-507499] - FINALIZE_SESSION
[INFO] 2025-10-02 09:01:52.136 +0300 org.apache.zookeeper.ClientCnxn:[1171] - [WorkflowInstance-0][TaskInstance-0] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181.
[INFO] 2025-10-02 09:01:52.136 +0300 org.apache.zookeeper.ClientCnxn:[1173] - [WorkflowInstance-0][TaskInstance-0] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
[INFO] 2025-10-02 09:01:59.281 +0300 org.apache.zookeeper.ClientCnxn:[1005] - [WorkflowInstance-0][TaskInstance-0] - Socket connection established, initiating session, client: /0:0:0:0:0:0:0:1:40934, server: localhost/0:0:0:0:0:0:0:1:2181
[INFO] 2025-10-02 09:01:59.282 +0300 org.apache.zookeeper.ClientCnxn:[1444] - [WorkflowInstance-0][TaskInstance-0] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, session id = 0x10000001be900ac, negotiated timeout = 30000
[INFO] 2025-10-02 09:01:59.282 +0300 org.apache.curator.framework.state.ConnectionStateManager:[252] - [WorkflowInstance-0][TaskInstance-0] - State change: RECONNECTED
[INFO] 2025-10-02 09:01:59.580 +0300 org.apache.dolphinscheduler.server.worker.processor.WorkerTaskUpdatePidAckProcessor:[59] - [WorkflowInstance-0][TaskInstance-507499] - task execute update pid ack command : TaskUpdateRuntimeAckMessage(success=true, taskInstanceId=507499)
[INFO] 2025-10-02 09:01:59.580 +0300 org.apache.dolphinscheduler.server.worker.processor.WorkerTaskExecuteResultAckProcessor:[58] - [WorkflowInstance-0][TaskInstance-507499] - Receive task execute response ack command : TaskExecuteResultMessageAck(super=BaseMessage(messageSenderAddress=10.200.109.63:5678, messageReceiverAddress=10.200.109.63:1234, messageSendTime=1759384886490), taskInstanceId=507499, success=true)
В рабочей службе DolphinScheduler на компьютере произошел критический сбой 2 октября 2025 г. в 09:40, в результате чего порт 1234 перестал прослушиваться, что привело к ошибкам «Соединение отклонено» от главного сервера. Из-за этой проблемы с подключением процессор загрузился даже на 100%, задания планировщика дельфинов не завершились должным образом и зависли в воздухе. В конце концов, так сказать, возникает пробка. Однако все службы постоянно работали.
ОБоснованные выводы США
Основной причиной была катастрофическая утечка потоков, а не нехватка памяти. Рабочий накопил более 21 466 потоков (рост со скоростью ~100 потоков в минуту) за 77,7 дней работы, потребляя примерно 21 ГБ ОЗУ только для стеков потоков. Это привело к тому, что паузы при сборе мусора сократились с 80 мс до более 1100 мс, в результате чего система перестала отвечать на запросы. В конце концов исполнитель событий Netty завершил работу, порт 1234 перестал прослушиваться, и рабочий процесс стал нефункциональным. Система была перезапущена вручную в 11:38 и с тех пор работает, но утечка потоков все еще активна и растет, что делает неизбежным еще один сбой в течение нескольких дней или недель.
РАЗУМНЫЕ РЕШЕНИЯ ОТ НАС
Код: Выделить всё
* Reduce Young Generation Size (Prevent long GC pauses)
Код: Выделить всё
# Edit worker JVM configuration
vim /data/dolphin/worker-server/bin/jvm_args_env.sh
# Change from:
-Xmn16g
# To:
-Xmn8g
# Restart worker
Код: Выделить всё
* Reduce Concurrent Task Limit
Код: Выделить всё
# Edit worker configuration
vim /data/dolphin/worker-server/conf/application.yaml
# Find and change:
worker:
exec-threads: 100 # Change to 50
# Add new lines:
max-cpu-load-avg: 0.7
reserved-memory: 0.3
# Restart worker
Код: Выделить всё
* Investigate DolphinScheduler Thread Pool Bug
This is the actual root cause that must be fixed.
Код: Выделить всё
- Bug in DolphinScheduler's thread pool implementation
- Task completion handlers not cleaning up threads
- Executor service not properly bounded
- Thread factory creating threads without limit
Я просто хочу, чтобы вы внимательно прочитали всю информацию, которую я предоставил, а также оценили решения, которые мы принимаем, потому что эта система очень важна для нас, прежде чем мы реализуем те решения, которые мы хотим обработать очень осторожно. Могут ли эти решения решить проблему здесь? А также, когда я искал в Интернете, управление памятью JVM Heap может сыграть здесь решающую роль, поэтому я хочу, чтобы вы также рассказали мне об управлении JVM Heap для решения проблем с производительностью.
Заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/797 ... ost-ip1234