<p>Does your /etc/Pam.d/su file use Pam_limits?</p>
<p>- Jon Miller</p>
<div class="gmail_quote">On Jan 14, 2012 4:31 PM, &quot;Rick Hornsby&quot; &lt;<a href="mailto:richardjhornsby@gmail.com">richardjhornsby@gmail.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Unfortunately, this has come up again.  I thought we were right setting the ulimit in /etc/security/limits.conf, but when I looked at the actual tomcat process which was started from an init script which contains this line:<br>

<br>
su - tomcat $TOMCAT_INSTANCE/bin/startup.sh<br>
<br>
The FD limit is maybe getting inherited from the shell which started it - root&#39;s.  The value for root is the system default of 1024, but 8192 for the tomcat user in /etc/security/limits.conf.<br>
<br>
I also tested this by kicking off tail using sudo (su terminated with a &#39;&amp;&#39; acts the same)<br>
<br>
sudo -bu tomcat tail -f /var/log/dmesg &gt; /dev/null<br>
<br>
When I check the limit in /proc/PID/limits, it is 1024 not 8192.  If instead of doing sudo right away, I do<br>
<br>
ulimit -n someval; sudo -bu tomcat …<br>
<br>
then the tail process, owned by tomcat, gets a limit of someval.<br>
<br>
I really don&#39;t want to do a hack and have the init script read /etc/security/limits.conf for the tomcat user, change the value and start tomcat …<br>
<br>
<br>
any other thoughts?<br>
<br>
thanks<br>
-rick<br>
<br>
On Dec 19, 2011, at 17:38 , Jon Miller wrote:<br>
<br>
&gt; Yes Jeff, you are correct and have the best answer to the question. My<br>
&gt; answer was the &quot;cowboy&quot; answer which really isn&#39;t expected to be<br>
&gt; followed but merely interesting to mention what you can accomplish via<br>
&gt; a kernel module hack. And as you&#39;ve pointed out, you can update your<br>
&gt; ulimit value, within your hard limit, from within the process itself.<br>
&gt; In my scenario, I needed to alter a process I did not own and<br>
&gt; furthermore update a value potentiall beyond it&#39;s hard limit. Again,<br>
&gt; that was my cowboy solution.<br>
&gt;<br>
&gt; -- Jon Miller<br>
&gt;<br>
&gt; On Mon, Dec 19, 2011 at 4:17 PM, Jeff Frontz &lt;<a href="mailto:jeff.frontz@gmail.com">jeff.frontz@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Slight correction - you can change ulimit values on a running process on a<br>
&gt;&gt; stock 2.6 kernel, but only from inside the process (via a call to setrlimit)<br>
&gt;&gt; and only to decrease it in an unprivileged process.<br>
&gt;&gt;<br>
&gt;&gt;&gt; From the FC7 setrlimit(2) man page:<br>
&gt;&gt;<br>
&gt;&gt;        The soft limit is the value that the kernel  enforces  for  the<br>
&gt;&gt;  corre-<br>
&gt;&gt;        sponding  resource.   The  hard  limit  acts  as a ceiling for the<br>
&gt;&gt; soft<br>
&gt;&gt;        limit: an unprivileged process may only set its soft limit to  a<br>
&gt;&gt;  value<br>
&gt;&gt;        in  the range from 0 up to the hard limit, and (irreversibly) lower<br>
&gt;&gt; its<br>
&gt;&gt;        hard  limit.   A  privileged  process  (under  Linux:  one   with<br>
&gt;&gt; the<br>
&gt;&gt;        CAP_SYS_RESOURCE capability) may make arbitrary changes to either<br>
&gt;&gt; limit<br>
&gt;&gt;        value.<br>
&gt;&gt;<br>
&gt;&gt; Jeff<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Mon, Dec 19, 2011 at 4:05 PM, Jon Miller &lt;<a href="mailto:jonebird@gmail.com">jonebird@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Correct, you&#39;re not supposed to be able to change a ulimit value of a<br>
&gt;&gt;&gt; currently running process. That said, I&#39;ve done it before via a custom<br>
&gt;&gt;&gt; kernel module. I was actually originally interested in resetting a<br>
&gt;&gt;&gt; signal handler for a currently running process in order to<br>
&gt;&gt;&gt; successfully generate a corefile. In the process of testing, we found<br>
&gt;&gt;&gt; out that the corefile I was getting was zero bytes because their<br>
&gt;&gt;&gt; ulimit for corefile size was set to 0. So, I made another update to<br>
&gt;&gt;&gt; the kernel module and was able to change the corefile size ulimit<br>
&gt;&gt;&gt; value to unlimited on the fly too.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; All the while we had a case open with Novell &amp; IBM and needless to<br>
&gt;&gt;&gt; say, they didn&#39;t like the idea of me creating a kernel module but it<br>
&gt;&gt;&gt; worked and we got the desired corefile finally. I have a short writeup<br>
&gt;&gt;&gt; on the ordeal on my blog:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; <a href="http://jonebird.com/2007/06/21/stripping-another-process-of-its-signal-handler/" target="_blank">http://jonebird.com/2007/06/21/stripping-another-process-of-its-signal-handler/</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -- Jon Miller<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Mon, Dec 19, 2011 at 3:26 PM, Rick Hornsby &lt;<a href="mailto:richardjhornsby@gmail.com">richardjhornsby@gmail.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Fri, Dec 2, 2011 at 2:57 PM, Mark Aufdencamp &lt;<a href="mailto:mark@aufdencamp.com">mark@aufdencamp.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt; A helpful link:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; <a href="http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/" target="_blank">http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks.  That was one of the things I read before posting that got me<br>
&gt;&gt;&gt;&gt; really turned around.  The language is very confusing, especially when<br>
&gt;&gt;&gt;&gt; he says things like &quot;75000 files normal user can have open in single<br>
&gt;&gt;&gt;&gt; login session.&quot;  That makes it seem like it is almost a per-user<br>
&gt;&gt;&gt;&gt; (per-session more specifically) limit.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Someone else said that the ulimit was a per-process restriction, and<br>
&gt;&gt;&gt;&gt; this appears to be true. /proc/&lt;pid&gt;/limits confirms this.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Recompiling the kernel isn&#39;t an option, but it is good to know that<br>
&gt;&gt;&gt;&gt; this is where the default of 1024 comes from.  Based on what folks<br>
&gt;&gt;&gt;&gt; suggested here and additional research, /etc/security/limits.conf is<br>
&gt;&gt;&gt;&gt; the place to set it.  Something that took me a while to get is the<br>
&gt;&gt;&gt;&gt; soft/hard limits.  Unlike disk/printer quotas, these different limits<br>
&gt;&gt;&gt;&gt; do not refer to warnings or other information that lets the user know<br>
&gt;&gt;&gt;&gt; they&#39;re about to run out.  Rather, the hard limit is the<br>
&gt;&gt;&gt;&gt; kernel-enforced maximum.  The soft limit can be set by the user, up to<br>
&gt;&gt;&gt;&gt; the hard limit.  So maybe the hard limit is 1024, but they decide a<br>
&gt;&gt;&gt;&gt; process has run away if it hits 128 open FDs.  That would be a use for<br>
&gt;&gt;&gt;&gt; the soft limit.  I believe, like a pid&#39;s nice value, the user can<br>
&gt;&gt;&gt;&gt; lower their own hard limit (priority), but once lowered, they cannot<br>
&gt;&gt;&gt;&gt; raise it.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; It does not, however, appear that it is possible to change the ulimit<br>
&gt;&gt;&gt;&gt; of a currently running process.  When a process starts up, the<br>
&gt;&gt;&gt;&gt; kernel(?) figures out what limits it should have, and those last for<br>
&gt;&gt;&gt;&gt; the life of the pid.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ulimit is just one of those things that seems to be poorly documented<br>
&gt;&gt;&gt;&gt; and not well understood.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; -rick<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; colug-432 mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
&gt;&gt;&gt;&gt; <a href="http://lists.colug.net/mailman/listinfo/colug-432" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; colug-432 mailing list<br>
&gt;&gt;&gt; <a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
&gt;&gt;&gt; <a href="http://lists.colug.net/mailman/listinfo/colug-432" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; colug-432 mailing list<br>
&gt;&gt; <a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
&gt;&gt; <a href="http://lists.colug.net/mailman/listinfo/colug-432" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
&gt;&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; colug-432 mailing list<br>
&gt; <a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
&gt; <a href="http://lists.colug.net/mailman/listinfo/colug-432" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
<br>
<br>
_______________________________________________<br>
colug-432 mailing list<br>
<a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
<a href="http://lists.colug.net/mailman/listinfo/colug-432" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
</blockquote></div>