[Icecast] IceCast Server (2.3.2) Limits? Disconnections due to user and memory?

"Thomas B. Rücker" thomas at ruecker.fi
Wed Feb 25 18:47:45 UTC 2015


On 02/24/2015 04:08 PM, "Thomas B. Rücker" wrote:
> On 02/24/2015 03:30 PM, Dean Sauer wrote:
>> On Tue, 24 Feb 2015 12:56:11 +0000, Thomas B. Rücker wrote:
>>
>>> Have you modified any of the buffer or burst parameters in Icecast? Can
>>> you provide your icecast.xml (passwords removed) as an attachment?
>>>
>> The list seems to dislike xml so hopefully this won't get stripped.
>>
> You're posting through the gmane NNTP interface using yenc encoding.
> That somehow doesn't work at all in this combination. Something along
> the way just eats everything.
>
> Could you please email those files to me directly using my personal
> email address, as regular mail attachments?

I received the files off list, attaching them to this mail.

The script is simple and ends with:
/usr/bin/mail -s "$SUBJECT" "$TO" < $MESSAGE
unset FEED

I don't see how that could be a problem unless the mail command would
for some reason stall.
Neither does 2.3.2 have threadpool support as it was removed way earlier.

The config doesn't look suspicious either. The particular values I was
interested look to be within bounds.

The only problem I spotted was a fallback definition:

<fallback-mount>feed9_pri_mark.mp3</fallback-mount>
Missing the prefix "/", but that might be due to how the file was "sanitized" from its original form.

I'm still suspcious of the script execution. It might help to attach to those additional processes and either strace them or look at them with gdb.


Thomas


-------------- next part --------------
<icecast>
    <limits>
        <clients>400</clients>
        <sources>420</sources>
        <threadpool>15</threadpool>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>60</source-timeout>
        <!-- If enabled, this will provide a burst of data when a client 
             first connects, thereby significantly reducing the startup 
             time for listeners that do substantial buffering. However,
             it also significantly increases latency between the source
             client and listening client.  For low-latency setups, you
             might want to disable this. -->
        <burst-on-connect>1</burst-on-connect>
        <!-- same as burst-on-connect, but this allows for being more
             specific on how much to burst. Most people won't need to
             change from the default 64k. Applies to all mountpoints  -->
        <burst-size>65535</burst-size>
    </limits>

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>SOURCEPASS</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>RELAYPASS</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>ADMINPASS</admin-password>
    </authentication>

    <!-- set the mountpoint for a shoutcast source to use, the default if not
         specified is /stream but you can change it here if an alternative is
         wanted or an extension is required
    <shoutcast-mount>/live.nsv</shoutcast-mount>
    -->

    <!-- Uncomment this if you want directory listings -->
    <!--
    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
     -->

    <!-- This is the hostname other people will use to connect to your server.
    It affects mainly the urls generated by Icecast for playlists and yp
    listings. -->
    <hostname>audio.somedomain.net</hostname>

    <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
        <!-- <bind-address>127.0.0.1</bind-address> -->
        <!-- <shoutcast-mount>/stream</shoutcast-mount> -->
    </listen-socket>
    <!--
    <listen-socket>
        <port>8001</port>
    </listen-socket>
    -->

    <!--<master-server>127.0.0.1</master-server>-->
    <!--<master-server-port>8001</master-server-port>-->
    <!--<master-update-interval>120</master-update-interval>-->
    <!--<master-password>hackme</master-password>-->

    <!-- setting this makes all relays on-demand unless overridden, this is
         useful for master relays which do not have <relay> definitions here.
         The default is 0 -->
    <!--<relays-on-demand>1</relays-on-demand>-->

    <!--
    <relay>
        <server>127.0.0.1</server>
        <port>8001</port>
        <mount>/example.ogg</mount>
        <local-mount>/different.ogg</local-mount>
        <on-demand>0</on-demand>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>
    -->
<mount>
 <mount-name>/Feed1.ogg</mount-name>
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>/feed_down_silence.ogg</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
 <mount-name>/Feed1</mount-name>
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>/feed1_down.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
 <mount-name>/feed2</mount-name>
 <!-- <fallback-mount>/feedmove.mp3</fallback-mount> -->
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>/feed2_primark.mp3</fallback-mount>
 <fallback-override>1</fallback-override> 
</mount>
<mount>
 <mount-name>/feed2.ogg</mount-name>
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>feed2_down_silence.ogg</fallback-mount>
</mount>
<mount>
 <mount-name>/feed3</mount-name>
 <on-disconnect>/etc/icecast2/kingkendown.sh</on-disconnect>
 <fallback-mount>/feed3_down.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
 <mount-name>/feed4</mount-name>
 <on-disconnect>/etc/icecast2/kingkendown.sh</on-disconnect>
 <fallback-mount>/feed4_down.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
 <mount-name>/feed5</mount-name>
<!-- <intro>/Scancaster_Rostraver.mp3</intro> -->
<!--  <on-disconnect>/etc/icecast2/feeddown2.sh</on-disconnect> -->
 <on-disconnect>/etc/icecast2/kingkendown.sh</on-disconnect>
 <fallback-mount>/feed5_down.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
 <mount-name>/feed6</mount-name>
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>/feed6_down.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
<mount-name>/feed7</mount-name>
  <fallback-mount>/feed7_pri_mark.mp3</fallback-mount>
  <on-disconnect>/etc/icecast2/feeddown4usc.sh</on-disconnect>
  <fallback-override>1</fallback-override>
  <hidden>1</hidden>
</mount>
<mount>
 <mount-name>/feed8</mount-name>
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>/feed8_down.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
<mount>
 <mount-name>/feed9</mount-name>
 <on-disconnect>/etc/icecast2/feeddown4.sh</on-disconnect>
 <fallback-mount>feed9_pri_mark.mp3</fallback-mount>
 <fallback-override>1</fallback-override>
</mount>
    <!-- Only define a <mount> section if you want to use advanced options,
         like alternative usernames or passwords
    <mount>
        <mount-name>/example-complex.ogg</mount-name>

        <username>othersource</username>
        <password>hackmemore</password>

        <max-listeners>1</max-listeners>
        <dump-file>/tmp/dump-example1.ogg</dump-file>
        <burst-size>65536</burst-size>
        <fallback-mount>/example2.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>
        <intro>/example_intro.ogg</intro>
        <hidden>1</hidden>
        <no-yp>1</no-yp>
        <authentication type="htpasswd">
                <option name="filename" value="myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
        <on-connect>/home/icecast/bin/stream-start</on-connect>
        <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
    </mount>

    <mount>
        <mount-name>/auth_example.ogg</mount-name>
        <authentication type="url">
            <option name="mount_add"       value="http://myauthserver.net/notify_mount.php"/>
            <option name="mount_remove"    value="http://myauthserver.net/notify_mount.php"/>
            <option name="listener_add"    value="http://myauthserver.net/notify_listener.php"/>
            <option name="listener_remove" value="http://myauthserver.net/notify_listener.php"/>
        </authentication>
    </mount>

    -->

    <fileserve>1</fileserve>

    <paths>
		<!-- basedir is only used if chroot is enabled -->
        <basedir>/usr/share/icecast2</basedir>

        <!-- Note that if <chroot> is turned on below, these paths must both
             be relative to the new root, not the original root -->
        <logdir>/var/log/icecast2</logdir>
        <webroot>/usr/share/icecast2/web</webroot>
        <adminroot>/usr/share/icecast2/admin</adminroot>
        <!-- <pidfile>/usr/share/icecast2/icecast.pid</pidfile> -->

        <!-- Aliases: treat requests for 'source' path as being for 'dest' path
             May be made specific to a port or bound address using the "port"
             and "bind-address" attributes.
          -->
        <!--
        <alias source="/foo" dest="/bar"/>
          -->
        <!-- Aliases: can also be used for simple redirections as well,
             this example will redirect all requests for http://server:port/ to
             the status page
          -->
        <alias source="/" dest="/status.xsl"/>
    </paths>

    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <!-- <playlistlog>playlist.log</playlistlog> -->
      	<loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
      	<logsize>10000</logsize> <!-- Max size of a logfile -->
        <!-- If logarchive is enabled (1), then when logsize is reached
             the logfile will be moved to [error|access|playlist].log.DATESTAMP,
             otherwise it will be moved to [error|access|playlist].log.old.
             Default is non-archive mode (i.e. overwrite)
        -->
        <logarchive>1</logarchive>
    </logging>

    <security>
        <chroot>0</chroot>
        <!--
        <changeowner>
            <user>nobody</user>
            <group>nogroup</group>
        </changeowner>
        -->
    </security>
</icecast>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kingkendown_SANI.sh
Type: application/x-shellscript
Size: 490 bytes
Desc: not available
URL: <http://lists.xiph.org/pipermail/icecast/attachments/20150225/e23587d2/attachment.bin>


More information about the Icecast mailing list