Skip to content

RMI thread Deadlock  #85

@shaburov

Description

@shaburov

take() is not the best solution for theBlockingQueue<Runnable>

System props

awt.toolkit=sun.lwawt.macosx.LWCToolkit
file.encoding=UTF-8
file.separator=/
gopherProxySet=false
java.awt.graphicsenv=sun.awt.CGraphicsEnvironment
java.awt.printerjob=sun.lwawt.macosx.CPrinterJob
java.class.path=target/Smoker.jar
java.class.version=55.0
java.home=/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home
java.io.tmpdir=/var/folders/2h/mjw8k1v93z9_t746q075t7j80000gp/T/
java.library.path=/Users/oshabur/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.rmi.server.randomIDs=true
java.runtime.name=OpenJDK Runtime Environment
java.runtime.version=11.0.1+13
java.specification.name=Java Platform API Specification
java.specification.vendor=Oracle Corporation
java.specification.version=11
java.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
java.vendor.url.bug=http://bugreport.java.com/bugreport/
java.vendor.version=18.9
java.version=11.0.1
java.version.date=2018-10-16
java.vm.compressedOopsMode=Zero based
java.vm.info=mixed mode
java.vm.name=OpenJDK 64-Bit Server VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Oracle Corporation
java.vm.specification.version=11
java.vm.vendor=Oracle Corporation
java.vm.version=11.0.1+13
jdk.debug=release
line.separator=\n
os.arch=x86_64
os.name=Mac OS X
os.version=10.14.1
path.separator=:
sun.arch.data.model=64
sun.boot.library.path=/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home/lib
sun.cpu.endian=little
sun.cpu.isalist=
sun.io.unicode.encoding=UnicodeBig
sun.java.command=target/Smoker.jar -Dslack.bot.access.list=oshaburov,oshaburov
sun.java.launcher=SUN_STANDARD
sun.jnu.encoding=UTF-8
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
sun.os.patch.level=unknown

Parking threads
image

CPU Time
image

CPU samples
image

Full thread dump
thread_dump.txt

Code

public class Smoker {
    private static boolean isRun = false;
    private static final Logger LOG = LoggerFactory.getLogger(Smoker.class);

    public static void main(String[] args) {
        isRun = true;
        String token = BaseMessageHandler.getToken();
        try (RTMClient rtm = new Slack().rtm(token)) {
            LOG.info("Real Time Messaging client started");
            rtm.addMessageHandler(new UserMessageHandler());
            rtm.addMessageHandler(new GroupMessageHandler());
            rtm.addErrorHandler(new ErrorHandler());
            rtm.connect();
            addShutdownHook();
            while (isRun) {
                sleep(1000);
            }
        } catch (Throwable e) {
            LOG.error("Unexpected exception. Service died.", e);
        } finally {
            Runtime.getRuntime().exit(1);
        }
    }
}

Log example
image

image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions