精华内容
下载资源
问答
  • DEFUNCT

    2019-10-24 13:22:28
    DEFUNCT
  • A lot of <defunct>

    2020-12-01 21:11:50
    defunct></code> processes. Ex: <pre><code>bash >>> ps auxf ... root 25328 0.0 0.0 0 0 ? Z Mar19 0:00 | \_ [runc:[1:CHILD]] <defunct> root 25767 0.0 0.0 0 0 ? Z Mar19 0:00 | \_ [runc:...
  • process defunct

    2020-12-30 13:07:02
    m noticing after an update is applied from a cronjob that sometimes I get a defunct process and the cron job email doesn't go out. <pre><code> #--CRONTAB BEGIN-- #check for updates every hour 0 0...
  • Defunct Process

    2021-01-07 20:46:01
    <p>When there is a network issue to reach rabbitmq we end up seeing tons of defunct processes in some of our clients. This makes our clients slow to run commands. <p>sensu 65117 1 0 Nov11 ? 00:00:00 ...
  • Defunct processes

    2020-12-25 22:01:32
    reaps all the child process that are defunct. <h2>Does it break backward compatibility? <ul><li>No</li></ul> <h2>Must have <ul><li>[x] Tests</li><li>[x] Code Review</li></ul> <h2>Dependencies <ul><li...
  • Defunct processes accumulate

    2020-12-31 05:49:45
    After running for a few weeks many defunct process are building up on the runners. <pre><code> 127383 ? Sl 0:39 \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime....
  • defunct processes

    2020-12-08 19:04:58
    <div><p>We seem to getting a lot of defunct processes from backup jobs with version 1.18 using CentOS 7.3.1611. It looks like the most recent backup is stuck at 96% as well. [root ~]# ps -ef |grep pg ...
  • Defunct process

    2020-12-06 19:22:30
    For the past few months, when sabnzbd (v 0.8) crashes, it leaves behind a defunct process that through my systemd services become a child of PID1 so cannot be killed. It also seems to still be ...
  • Defunct ssh processes

    2020-11-28 10:24:51
    <div><p>When Oxidized (0.14.3) is running for some time I get defunct ssh processes. Like: <code>oxidized 29377 0.0 0.0 0 0 ? Z May28 0:00 [ssh] <defunct> I'm not sure where they come from ...
  • syncoid defunct processes

    2020-12-31 18:52:18
    However the syncoid process does not seem to exit properly, it leaves socket files in /tmp directory and ends up in a defunct state, after 24 hours I have lots of defunct syncoid processes and socket...
  • Defunct Xorg processes

    2020-12-09 15:07:57
    - there were defunct (Z) or uninterruptible IO (D) <code>Xorg</code> processes - <code>coolgpus</code> would keep waiting for them to be killed (which is not possible) - fan speeds were not updated, ...
  • ) is causing some issues with defunct process creep. <pre><code> # docker pull sickchill/sickchill Using default tag: latest latest: Pulling from sickchill/sickchill Digest: sha256:d67e4fd965b6e2230...
  • defunct python?

    2020-12-03 02:38:51
    checking processes, I can see defunct python processes. This seems to be the culprit but i can't explain why this is happening. it didn't happen in the past. I moved to new hardware about 2 ...
  • Prevent defunct iipsrv

    2020-12-02 19:50:56
    <p>mi iipsrv based server just hung up - permitted number of iipsrv processes got defunct and apache hasn't killed them. <p>My fcgi config: <pre><code> # Set our environment variables for the ...
  • defunct processes of ora2pg

    2020-12-31 19:58:49
    We noticed below defunct OS processes while running the ora2pg migration. We transferred 12 tables with the below mentioned command. 11 out of 12 were successfully migrated but last one kind of stop ...
  • defunct> root 26094 0.0 0.0 0 0 ? Z 13:00 0:00 \_ [ganeti-mond] <defunct> root 26095 0.0 0.0 0 0 ? Z 13:00 0:00 \_ [ganeti-mond] <defunct> root 26096 0.0 0.0 0 0 ? Z 13:00 0:00 \_ ...
  • Reload : Fix defunct

    2020-12-09 14:27:13
    <p>After several reload, there are many defunct process. in daemon-init, change the reload function <p>reload() { echo -n "Reloading $prog: " # pkill -HUP -u ${user} -f ${exec} kill -HUP $...
  • java defunct产生的原因和解决办法:在很多时候,我们启动JAVA进程后,如果退出这个JAVA进程,在系统进程中仍然可以看到这个进程.这种情况一般出现在UNIX/linux系统,对于WIN平台出现情况较少.这个进程在UNIX平台上,你...

    java defunct产生的原因和解决办法:

    在很多时候,我们启动JAVA进程后,如果退出这个JAVA进程,在系统进程中仍然可以看到这个进程.

    这种情况一般出现在UNIX/linux系统,对于WIN平台出现情况较少.

    这个进程在UNIX平台上,你即使kill进程号也不能杀掉它,但它仍然占用系统资源,成了真正的"僵尸"。

    http://www.gaodaima.com/41483.htmljava defunct产生的原因和解决办法

    产生的原因:

    以前我们下载JDK时,可以下载到JDK的SRC然后自己编译,现在的官方网站上已经找不到可以自己编

    译的JDK包,下载回来的JDK都是释放包,我们可以想象,无论SUN在发布JDK时考虑得如何完美,本地

    库都不可能完全和当前系统的版本号完全一致。举个例子,假如System.gc()调用了本地库glic6.0.2.so

    那么在当前系统上没有这个版本的库或没有这个版本的库的链结,那么gc()方法肯定不能正确工作。

    当然sun在发布的时候可能会把这个本地库打包在JDK发行包中,但glic6.0.2.so中又调用了其它库,如

    subglic6.0.21.so,即使系统中存在完全相同的glic6.0.2.so,但你无法确认它调用的库又完全匹配,

    事实上这几乎是不可能完全匹配的。

    正是这样本地库版本号的不一致,才使得需要调用本地库的jvm底层功能不能正确工作,所以清除,

    退出进程等工作就可能无法完成,产生了java defunct。

    知道了问题的原因,就能从多方面解决了。如果我们的JDK的src版进行编译安装而不是用SUN提供好的

    本地库,当然不会存在上面的问题,但现在好象已经不提供src编译安装的发布包了,所以指定内核版本

    号,以便使它和JDK发布时使用的版本相一致,可以基本解决java defunct。

    假如你不知道当前JDK的本地库是基于什么内核版本号发布的,一般来说,应该提供系统当前的内核版本号:

    在Linux下,先查看当前的内核版本:

    uname -r

    2.4.21-4.EL

    把主版本号COPY下来,调用:

    LD_ASSUME_KERNEL=2.4.21-4

    export LD_ASSUME_KERNEL

    如果你知道某个版本的JDK中的本地库是基于某个内核版本发而布的那你可以直接指定LD_ASSUME_KERNEL为

    这个版本,这样会获得最大的一致性

    欢迎大家阅读《java defunct产生的原因和解决办法》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

    e7ce419cf2d6ad34d01da2ceb8829eed.png

    微信 赏一包辣条吧~

    023a57327877fb4402bcc76911ec18ea.png

    支付宝 赏一听可乐吧~

    展开全文
  • Mailinglist is defunct

    2021-01-12 02:55:06
    <div><p>The ejabberd mailinglist -- web page under http://lists.jabber.ru/mailman/listinfo/ejabberd -- appears to be defunct, i.e. doesn't work. I am subscribed since months and have successfully ...
  • defunct> </defunct></code></pre> <p>Relevant Backtrace: <pre><code> #8 elektraDumpGet (returned=0x55c2db1e13c0, parentKey=0x55c2db1e1930) at /home/jenkins/workspace/libelektra_master...
  • <p>I use wptagent docker image with docker-compose and I notice that this generates defunct processes. <p>webpagetest-agent1: image: webpagetest/agent environment: SERVER_URL: ...
  • <p>I see many defunct perl processes under Minion: <p><img alt="image" src="https://img-blog.csdnimg.cn/img_convert/67c08568a808af643dda815a43b3c3af.png" /></p> <p>However, I would think that these ...
  • defunct进程

    千次阅读 2013-07-24 11:34:45
    当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。 但是如果该进程的父进程已经先结束了,

     

    一、什么是僵尸进程


    在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。


    但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。


    二、UNIX下进程的运作方式


    每个Unix进程在进程表里都有一个进入点(entry),核心进程执行该进程时使用到的一切信息都存储在进入点。当用 ps 命令察看系统中的进程信息时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程就会在进程表中给这个新进程分配一个进入点,然后将相关信息存储在该进入点所对应的进程表内。这些信息中有一项是其父进程的识别码。


    子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。那么会不会因为父进程太忙来不及 wait 子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢?


    不会。因为UNIX提供了一种机制可以保证,只要父进程想知道子进程结束时的状态信息,就可以得到。这种机制就是:当子进程走完了自己的生命周期后,它会执行exit()系统调用,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出码exit code,退出状态the terminationstatus of the process,运行时间the amount of CPU time taken by the process等),这些数据会一直保留到系统将它传递给它的父进程为止,直到父进程通过wait / waitpid来取时才释放。


    也就是说,当一个进程死亡时,它并不是完全的消失了。进程终止,它不再运行,但是还有一些残留的数据等待父进程收回。当父进程 fork() 一个子进程后,它必须用 wait() (或者 waitpid())等待子进程退出。正是这个 wait() 动作来让子进程的残留数据消失。


    三、僵尸进程的危害


    如果父进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统的进程表容量是有限的,所能使用的进程号也是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。


    所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。而且,
    由于调度程序无法选中Defunct 进程,所以不能用kill命令删除Defunct 进程,惟一的方法只有重启系统。


    四、僵尸进程的产生


    如果子进程死亡时父进程没有 wait(),通常用 ps 可以看到它被显示为“<defunct>”,这样就产生了僵尸进程。它将永远保持这样直到父进程 wait()。


    由此可见,defunct进程的出现时间是在子进程终止后,但是父进程尚未读取这些数据之前。利用这一点我们可以用下面的程序建立一个defunct 进程
     
    #include <stdio.h>
    
    #include<sys/types.h>
    
    main()
    {
    
    	if(!fork())
    	{
    
    		printf(“child pid=%d\n”, getpid());
    
    		exit(0);
    
    	}
    
    	sleep(20);
    
    	printf(“parent pid=%d \n”, getpid());
    
    	exit(0);
    
    }

    当上述程序以后台的方式执行时,第17行强迫程序睡眠20秒,让用户有时间输入ps -e指令,观察进程的状态,我们看到进程表中出现了defunct进程。当父进程执行终止后,再用ps -e命令观察时,我们会发现defunct进程也随之消失。这是因为父进程终止后,init 进程会接管父进程留下的这些“孤儿进程”(orphan process),而这些“孤儿进程”执行完后,它在进程表中的进入点将被删除。如果一个程序设计上有缺陷,就可能导致某个进程的父进程一直处于睡眠状态或是陷入死循环,父进程没有wait子进程,也没有终止以使Init接管,该子进程执行结束后就变成了defunct进程,这个defunct 进程可能会一直留在系统中直到系统重新启动。

     

     

    在看一个产生僵尸进程的例子。

    子进程要执行的程序test_prog

    //test.c
    #include <stdio.h>
    int main()
    {
            int i = 0;
            for (i = 0 ; i < 10; i++)
            {
                    printf ("child time %d\n", i+1);
                    sleep (1);
            }
            return 0;
    }

    父进程father的代码father.c
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    int main()
    {
            int pid = fork ();
            if (pid == 0)
            {
                    system ("./test_prog");
                    _exit (0);
            }else
            {
                    int i = 0;
                    /*
                                    int status = 0;
                    while (!waitpid(pid, &status, WNOHANG))
                    {
                            printf ("father waiting%d\n", ++i);
                            sleep (1);
                    }*/
                    while (1)
                    {
                            printf ("father waiting over%d\n", ++i);
                            sleep (1);
                    }
                    return 0;
            }
    
    }

    执行./father,当子进程退出后,由于父进程没有对它的退出进行关注,会出现僵尸进程
    20786 pts/0    00:00:00 father
    20787 pts/0    00:00:00 father <defunct>

    总结:子进程成为 defunct 直到父进程 wait(),除非父进程忽略了 SIGCLD 。更进一步,父进程没有 wait() 就消亡(仍假设父进程没有忽略 SIGCLD )的子进程(活动的或者 defunct)成为 init 的子进程,init 着手处理它们。


    五、如何避免僵尸进程

     

    1、父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。

     

    在上个例子中,如果我们略作修改,在第8行sleep()系统调用前执行wait()或waitpid()系统调用,则子进程在终止后会立即把它在进程表中的数据返回给父进程,此时系统会立即删除该进入点。在这种情形下就不会产生defunct进程。


    2. 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler。在子进程结束后,父进程会收到该信号,可以在handler中调用wait回收。

     

    3. 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCLD, SIG_IGN)或signal(SIGCHLD, SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号 


    4. fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收还要自己做。 下面就是Stevens给的采用两次folk避免僵尸进程的示例:

    #include "apue.h"
    #include <sys/wait.h>
    
    int
    main(void)
    ...{
         pid_t    pid;
    
        if ((pid = fork()) < 0) ...{
             err_sys("fork error");
         } else if (pid == 0) ...{     /**//* first child */
            if ((pid = fork()) < 0)
                 err_sys("fork error");
            else if (pid > 0)
                 exit(0);    /**//* parent from second fork == first child */
            /**//*
              * We're the second child; our parent becomes init as soon
              * as our real parent calls exit() in the statement above.
              * Here's where we'd continue executing, knowing that when
              * we're done, init will reap our status.
             */
             sleep(2);
             printf("second child, parent pid = %d ", getppid());
             exit(0);
         }
        
        if (waitpid(pid, NULL, 0) != pid)  /**//* wait for first child */
             err_sys("waitpid error");
    
        /**//*
          * We're the parent (the original process); we continue executing,
          * knowing that we're not the parent of the second child.
         */
         exit(0);
    }

    展开全文
  • O2 links to defunct company

    2020-12-08 21:08:03
    <div><p>The entry for O2 is linked to Q7072246, which is a defunct company that ceased business in 2015. <p>It probably should be linked to the parent company which is Q1759255. This also affects the ...
  • <p>1) node running on laptop, mix of healthy and defunct peers - <pre><code> Dec 06 09:44:19.198 DEBG monitoring_peers: 4 / 8 / 279 Dec 06 09:44:19.200 DEBG monitoring_peers: all - 279, healthy - 144,...
  • There is a lot of defunct ruby processes left behind. <p>wwwrun 121 0.0 0.0 0 0 ? Z 07:07 0:00 [ruby] wwwrun 249 0.0 0.0 0 0 ? Z 07:12 0:00 [ruby] wwwrun 259 0.0 0.0 0 0 ? Z 07:12 0:00 [ruby] ...
  • <div><p>Sometimes, an authority comes into existence but has no requests made against it before it is defunct. <p>Is it possible to make Alaveteli automatically hide all authorities which are defunct ...
  • 现象描述大概1个月多以前 在启动脚本中增加了tail -f用来启动后追踪日志判断是否启动成功后发现无法执行shutdown.sh(卡住 利用curl) 然后无奈使用kill -9但通过ps -el 发现此时进程变为defunct 即僵尸进程当时的解决...

    现象描述

    大概1个月多以前 在启动脚本中增加了tail -f

    用来启动后追踪日志判断是否启动成功

    后发现无法执行shutdown.sh(卡住 利用curl) 然后无奈使用kill -9

    但通过ps -el 发现此时进程变为defunct 即僵尸进程

    当时的解决办法无奈 只能找到僵尸进程的父进程kill

    当时认为可能是tail的问题 后来启动脚本中去掉tail 发现问题解决

    But

    当时一直没有来得及排查是如何引起僵尸进程的问题

    这两天抽时间排查了一下 发现和tail没有一毛钱关系

    艰难的排查过程1-尝试复现

    测试代码Defunct.java

    b9ebe832346694b62aa2622dffd570a7.png

    启动脚本start.sh

    37e87cf87759ee2f567081c37d4e2643.png

    启动脚本start_tail.sh 使用了tail

    b40da71532d47533105cda9d43df108f.png

    关服脚本stop.sh 这里使用kill关服

    45a8578d2c05edf19b9f396a97021c88.png

    分别用两个脚本测试,得出下面几个结论:

    所以初步结论是貌似和tail没有什么关系

    此时sh和tail两个进程都结束了

    而此时java进程的父进程变为了1

    sh分别有两个子进程

    一个是java子进程 一个是tail子进程

    start.sh启动的java进程的父进程是1 即init进程

    start_tail.sh启动后 java进程的父进程是sh

    当启动start_tail.sh后 因为tail是前台进程 所以ctrl+c可以结束

    用这个例子做各种测试 都无法复现僵尸进程的问题

    艰难的排查过程2-游戏服务器尝试复现

    当初出现是在游戏服务器复现的 那么应该比较复现吧

    修改了一个游戏服务器的启动脚本 默认是没有加tail 现在加上了tail -f

    启动游戏服务器脚本 看到日志 启动成功 ctrl+c 退出tail

    调用shutdown.sh 发现服务器顺利关闭

    结论:竟然无法在游戏服务器复现

    艰难的排查过程3-各种思考、查阅资料

    首先从僵尸进程的产生原因入手,猜测是否是sh这个父进程没有调用waitpid去回收java子进程。

    查询网上类似的tomcat tail -f问题,思考当初1个多月以前的情形,其中有一个很重要的当初情形是shutdown的时候ctrl卡住了。灵光一现,难道是当初操作失误了,没有按下ctrl+c而是按下了ctrl+z。

    神奇的ctrl+z 复现测试代码defunct

    启动start_tail.sh 然后ctrl+z

    1958799c03f6b7ac3c58b79669fda5d2.png

    启动stop.sh 发现进程(3974)无法被stop

    2308acf37767b36a8a46bfc297a4d2ee.png

    使用kill -9 尝试杀死进程 此时发现进程已经是defunct了

    cd8964a5bf4a518b8634f10f67c9de54.png

    此时只要使用fg命令从后台调到前台然后按下ctrl+c 则僵尸进程自动消失

    276746124b627ac3e4fbd8643f61658e.png

    神奇的ctrl+z 复现游戏服务器defunct

    启动脚本(有tail) 等待一段时间(将所有服务器全部开启) 并ctrl+z

    bd47e91551ac1ac82fb5dd136d3365a1.png

    此时执行shutdown.sh 发现没有任何反应(卡住) 无奈ctrl+c

    29fb919f2db7a008edc26c735f85a339.png

    此时执行jstack 也发现没有任何反应(卡住) 无奈ctrl+c

    c7afdc5297f3960386d98eeee43eaacf.png

    此时执行kill -9 此时java进程已经变为了僵尸进程

    384978d784830d9338a5f442d187c2be.png

    此时用fg将暂停的脚本恢复 然后ctrl+c 则僵尸进程消失 顺利被回收

    235334472a4716694de1a3007519df7b.png

    总结1

    tail和造成defunct没有任何关系

    根本原因是因为按下ctrl+z 将start_tail.sh切换到了后台

    测试1 当start_tail.sh后 按下ctrl+z 如果直接被crt#session关闭了呢

    更神奇的事情发生了 java进程直接被干掉了

    !!这个在游戏服务器也测试了 一定要注意!!

    测试2 执行start_tail.sh 直接关闭ctr#session 则java进程还在 因为是nohup启动

    测试3 当start_tail.sh后 按下ctrl+z 再按fg 恢复执行 此时之后可以顺利shutdown

    总结2

    正常启动脚本 没有tail java进程的父进程是1 即init进程 使用shutdown脚本关闭java进程后 自动被init进程回收

    启动脚本加了tail

    此时java进程的父进程是sh进程

    sh进程有两个子进程 一个是java子进程 一个是tail子进程

    直接ctrl+c 则sh进程和tail进程都结束 java进程的父进程变为了1

    如果不ctrl+c 直接shutdown java进程 则java进程也会正常结束,即sh父进程会回收java子进程

    总结3

    最终‘罪魁祸首‘是ctrl+z ,它会暂停程序的运行

    如果我们启动脚本没有加tail 则执行完nohup & 自动到后台

    但是我们加了tail后 因为tail是前台进程 所以要么ctrl+c结束 要么ctrl+z

    如果我们按下了ctrl+z 则sh启动的所有子进程都会暂停

    所以我们的java进程此时处于暂停状态 所以shutdown/jstack都卡住了一样 只能ctrl+c退出

    然后错误的操作就是使用kill -9 这个会把进程给干掉 但是因为父进程sh被暂停了 所以无法waitPid 执行子进程的回收操作 从而导致java进程变为了僵尸进程

    而通过fg恢复后 ctrl+c 父进程和tail都退出 java进程被init进程接管 自动回收

    总结4

    加tail -f 没有问题,但是一定不要忘了ctrl+c;

    如果ctrl+z 那么一定要fg然后ctrl+c;

    当出现shutdown.sh卡住或者操作jvm都没反应,则可以怀疑是暂停引起的;

    ————————————

    原文链接:https://www.jianshu.com/u/21add3dce532

    原文:https://www.cnblogs.com/GX1234/p/11556953.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,144
精华内容 457
关键字:

defunct