使用 ulimit 时出现一些非常奇怪的行为。我只是打开一个新的外壳
Hector:~ robertj$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 532
virtual memory (kbytes, -v) unlimited
Run Code Online (Sandbox Code Playgroud)
好的,即使我将 /etc/launchd.conf 中的文件限制设置为无限制,这似乎也是默认设置。但这是另一天的另一个问题。
现在我将文件数增加到 1024,让我们再次查看新设置。
Hector:~ robertj$ ulimit -n 1024
Hector:~ robertj$ ulimit -a …Run Code Online (Sandbox Code Playgroud) 我有一个709最大用户进程。我想加倍,或更多。
第一:ulimit
> ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
Run Code Online (Sandbox Code Playgroud)
好吧 :
> sudo ulimit -u 1418
Password:
Run Code Online (Sandbox Code Playgroud)
让我检查...
> ulimit -a
core file …Run Code Online (Sandbox Code Playgroud) 我听说
sudo launchctl limit maxfiles 64000 unlimited
Run Code Online (Sandbox Code Playgroud)
和
conf=/etc/sysctl.conf
if sudo cat $conf | command rg kern.maxfiles ; then
ecerr "kern.maxfiles is already set in $conf"
else
sudo echo 'kern.maxfiles=40480
kern.maxfilesperproc=28000' >> "$conf"
fi
Run Code Online (Sandbox Code Playgroud)
对于以前版本的 macOS,但这些都不适用于 Big Sur。
在编写程序时,有时一个失控的程序会占用我一半的 RAM(通常是由于在创建大型数据结构时实际上是无限循环),并使系统变得非常缓慢,我什至无法杀死有问题的程序。所以我想使用ulimit在我的程序使用异常内存时自动杀死我的程序:
$ ulimit -a
core file size (blocks, -c) 1000
data seg size (kbytes, -d) 10000
scheduling priority (-e) 0
file size (blocks, -f) 1000
pending signals (-i) 6985
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) 10000
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 6985
virtual memory (kbytes, …Run Code Online (Sandbox Code Playgroud) 如果我做一个
lsof | grep user | wc -l
Run Code Online (Sandbox Code Playgroud)
我得到一个在 25,000 范围内返回的数字。
如果我检查
ulimit -a 用户
nofiles 设置为 1024。
有人可以帮助我更好地了解打开文件的数量设置吗?显然情况并非如此,但我认为 1024 的硬文件意味着用户不能打开超过 1024 个文件。
所以,我在远程主机上有一个 sudoer 帐户,我在其中创建了一个具有数千个线程和套接字的进程。问题是,如果我创建了太多线程/套接字(不确定是哪一个,甚至可能是其他一些限制),我就会被主机锁定:我的 ssh 连接丢失,如果我尝试重新使用 ssh,我收到一条Write failed: Broken pipe错误消息。
除了要求其他用户进入sudo killall -9 -u myusername该机器之外,我如何才能重新进入系统?主机通常可供其他用户访问。
我正在尝试强制执行程序在 Unix 系统上可以消耗的最大内存。我认为 ulimit -v 应该可以解决问题。这是我为测试编写的示例 Java 程序:
import java.util.*;
import java.io.*;
public class EatMem {
public static void main(String[] args) throws IOException, InterruptedException {
System.out.println("Starting up...");
System.out.println("Allocating 128 MB of Memory");
List<byte[]> list = new LinkedList<byte[]>();
list.add(new byte[134217728]); //128 MB
System.out.println("Done....");
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,我的 ulimit 设置是(ulimit -a 的输出):
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31398
max locked memory (kbytes, -l) 64 …Run Code Online (Sandbox Code Playgroud) 几个月前,我编写了一组 bash 脚本,使用 tmux 在 AIX 7.1 服务器上创建一个简单的 IDE。我的一个脚本中存在一个错误,有时会非常快速地生成用户进程,直至达到 ulimit 设置的限制。这种情况很少发生(大约每月一次),而且我已经花了几个小时来追踪这个错误,但没有成功,所以我决定暂时,我可以简单地将我的软用户进程限制设置为低于硬限制(例如 100 而不是 1024),这样当我的错误再次出现时,服务器上的其他用户不会有明显的性能下降。不幸的是,“ulimit -Su 100”似乎在 AIX 7.1 上的 bash 中不起作用,但它在 ksh 中起作用。我已经执行了以下解决方法:
使 ksh 成为默认 shell:
$ chsh [username] /usr/bin/ksh
Run Code Online (Sandbox Code Playgroud)
将以下内容写入 ~/.kshrc:
ulimit -Su 100 # works in ksh, but not in bash
/bin/bash -il # start bash as an interactive login shell
exit # once bash exits, exit from ksh, too
Run Code Online (Sandbox Code Playgroud)
所以现在,每次我创建一个 shell 时,ksh 都会设置软用户进程限制并启动 bash 作为一个交互式登录 shell(我仍然希望 ~/.bash_profile 获得来源)。现在我想知道,在 ksh 中设置的用户进程限制是否仍然会在 bash 子 shell 中强制执行?在顶级 bash 子shell中,我运行了以下命令: …
我一直在尝试提高优胜美地的 maxfile 限制和 maxfileperproc 限制,但没有运气。我在 etc 文件夹中创建了一个 sysctl.conf 文件,它在通过 grep 显示时成功增加了值。
但是,如果我查看launchctl limit maxfiles,该值仍然不正确。
一些解决方案似乎使用 ulimit -n 来设置限制,但是在终端中时,我实际上无法使用它。它给了我“无效参数”或“未经授权的操作”的错误。我已经通过 bash_profile 脚本成功增加了 ulimit,但是由于应用程序是从应用程序运行的,而不是从 shell 运行的,所以它无关紧要。我还通过 root 用户成功地增加了 ulimit,但是当它被注销时,它不会保存更改。
理想情况下,我正在寻找像 launchd.conf 文件那样工作的东西,并且只是在重新启动时自动增加 launchctl limit maxfiles {#}。
有没有办法成功地做到这一点?也许使用像 Lingon 这样的 3rd 方,或者使用启动守护程序?
谢谢!
调用ulimit -a返回如下:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 1895
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1895
virtual memory (kbytes, -v) …Run Code Online (Sandbox Code Playgroud) 这很奇怪。我试图设置ulimit到60000通过我的startup.sh:
#!/bin/bash
ulimit -n 60000
echo "Hello! File Descriptor set"
Run Code Online (Sandbox Code Playgroud)
我可以使用./startup.sh(755 文件权限)执行此操作并打印回显行,并且未显示任何错误。但是,当我这样做ulimit -n时仍然显示1024,这是怎么回事?
我还觉得很有趣的是,我可以ulimit -n 60000在终端中输入,然后ulimit -n就可以完美运行了。为什么我不能通过脚本设置文件描述符限制?
Debian 8,64 位。OpenVZ 容器
我需要增加 Linux 上的默认堆栈大小。据我所知,通常有两种方法:
ulimit -s size/etc/security/limits.confulimit 方法仅在我登录后才有效。
limit.conf 将在重新启动后工作。
有没有办法在不重新启动的情况下增加限制?
我正在尝试限制 的内存使用,firefox以防止它在有问题的网站上拖延整个系统。
我试过,在bash:
(ulimit -d 1000; firefox) &
Run Code Online (Sandbox Code Playgroud)
这应该将内存使用限制为 1000kB。然后我打开 YouTube,注意到在 中top,firefox使用了 2.6% 的内存,或者大约 200MB,并且没有崩溃。显然,限制被忽略了。为什么会这样,我如何正确执行它?