[Samba] Smbd hanging

Matt Lung matt.lung at midwest-tool.com
Wed Mar 29 15:17:13 GMT 2006



Martin Zielinski wrote:
> Bruno Gomes Pessanha wrote:
>> I'm having the same problem... but with a 520 print queues samba 
>> server and
>> 20.000 AD users.
>> I'm getting desperate! I did a lot of tuning changes..... but nothing 
>> helps!
>>
>> Bruno
>>
> [...]
>
> If i remember correctly, the original description of the problem has 
> been, that the number of smbd proccess is growing until this breaks 
> the whole system (correct me, if I'm  wrong).

Actually it does not break the whole system.  Only Samba is broken.  All 
other services continue running on the server and work fine, but samba 
just hangs and connections that were already made stop working, and all 
new connections are denied.  Please review bug #3636 that I submitted 
yesterday. 

If more information is needed I'll provide it, but for now I'm waiting 
for it to crash again to get an strace on one of the processes and more 
debug at level 10. 

Thanks
Matt Lung
>
> In your case the reason might be that clients leave *one* spoolss-pipe 
> open, after they have opened (and closed) a connection to a printer. 
> The deadtime parameter is not working, because of this one open 
> connection.
> BTW, this is diffrent to connections with admin rights.
>
> To fix this, I add the following lines to smbd/conn.c:
> ---- start code
>     for (conn=Connections;conn;conn=next) {
>         next=conn->next;
>         /* close dirptrs on connections that are idle */
>         if ((t-conn->lastused) > DPTR_IDLE_TIMEOUT)
>             dptr_idlecnum(conn);
> +    /* force the closure, even if one spoolss is open */
> +        if (conn->num_files_open == 1 && (t-conn->lastused)>=deadtime) {
> +            for (plist = get_first_internal_pipe(); plist;    
> +                            plist = get_next_internal_pipe(plist)) {
> +                if (plist->name && !strcmp (plist->name, "spoolss")) {
> +                    DEBUG(2,("Client holds one spoolss connection. 
> Deadtime reached. Closing last pipe\n"));
> +                    pipe_close_conn (conn);
> +                    break;
> +                }
> +            }
> +        }
> +
>         if (conn->num_files_open > 0 ||
>             (t-conn->lastused)<deadtime)
>             allidle = False;
>     }
> ---- end code
>
> If the description meets your existing problem, this might help.
> (There was an earlier discussion with Gerald Carter about this topic - 
> this might be his code or merged with mine - I don't remember excactly)
>
> Bye,
> Martin
>
>> -- 
>> ---
>> Bruno Gomes Pessanha
>> LPI Brasil
>
>

-- 
Matt Lung

Midwest Tool & Die, Corp.




More information about the samba mailing list