最佳技术支持

作者:多人
超大 malloc()

我想了解在 Linux 下,限制单个进程可用内存的问题是什么。

我有一台 Athlon 1.2GHz 处理器,配备 1.5GB 内存和 2GB 交换空间。操作系统是 Red Hat 7.1,内核版本为 2.4.3-12。系统启动时可以看到全部 1.5GB 内存,并通过 top 和其他实用程序报告相同的信息。但不幸的是,单个进程最多只能占用大约 940MB。我正在通过运行一个简单的 C 程序来测试进程内存限制,该程序分配一个大型 char 数组。

—Ned Piburn, npiburn@oti.gd-ots.com

Linux 内核有一个设置,用于控制内核空间和用户空间之间的内存分配。 可能是您的特定内核被构建为向内核提供 3GB,向用户空间提供 1GB。 当您进入内核配置 (cd /usr/src/linux; make menuconfig) 时,检查 “Processor type and features / Maximum Virtual Memory” 并将其设置为 3GB(如果您使用 2GB,某些修补过的内核会有错误)。

—Marc Merlin, marc_bts@valinux.com

GNU libc 对于小分配使用 brk(),对于较大分配使用 mmap(),并且使用 brk() 只能分配大约 900MB。 许多小的分配可能会失败,而较少的大的分配会成功。 如果这是您的代码遇到的问题,一种解决方案是编写自定义的 malloc()——要么始终使用 mmap() 分配内存,要么先 mmap() 大块内存,然后在块内分配片段。

—Scott Maxwell, maxwell@ScottMaxwell.org

mallopt 函数在 GNU Info 文档中 libc 的 “Malloc Tunable Parameters” 下进行了介绍。 将 M_MMAP_THRESHOLD 设置为强制 malloc() 使用 mmap() 而不是 brk()。

—Don Marti, dmarti@ssc.com

我的第四个 CPU 在哪里?

我在一台三处理器机器上安装了 SuSE 7.1,然后添加了第四个处理器。 操作系统看不到新的 CPU。 它是一台 Compaq dl580,x86 架构。 您是否需要重新编译或做一些额外的事情才能使操作系统识别新的 CPU?

—Chet Jaynes, cjorlb@pacbell.net

只要主板支持,Linux 应该能够检测并使用第四个处理器。 使用 BIOS 设置以确保系统本身已启用它。

—Mario Neto, mneto@argo.com.br

RPM 无法升级 RPM

我目前正在使用 Red Hat Linux 6.2,版本为 RPM-3.0.3。 为了从 RPM-3.0.3 升级到 RPM-4.0.2,我尝试按照说明安装 db3-3.1.17,但收到了错误消息

rpm can only install packages with
major version number <= 3

—Atul, atul_info@yahoo.com

安装版本 3 RPM 的最新版本,因为它同时处理 RPM3 和 RPM4。 您可以从 ftp.rpm.prg/pub 获取它。

—Keith Trollope, keith@wishing-well.demon.co.uk

Red Hat 6.2 下的 Adaptec SCSI 卡

我的 Red Hat 6.2 自动检测到 Adaptec 29160 卡,并且动态模块 AIC-7xxx 被添加到 /etc/conf.modules。 但是,当我将 SCSI 硬盘驱动器连接到该卡时,没有 /dev/sda 可用于 fdisk。 设备文件存在,但 fdisk 无法访问。 如果我启动 Red Hat 7.1,则 SCSI 磁盘被识别并工作。 但我需要在 Red Hat 6.2 下使用此 SCSI 卡启动。 如何使它在 Rh6.2 下工作?

—Joshua, cschen@asiaa.sinica.edu.tw

一种解决方案是在 Red Hat 6.2 发行版上安装您的 Red Hat 7.1 内核。 您还需要升级一些其他软件包,例如 modutils。

—Marc Merlin, marc_bts@valinux.com

当我得到我的 Adaptec 29160(顺便说一句,很棒的卡)时,我也遇到了同样的问题。 我临时在 IDE 驱动器上安装了 Linux,从 kernel.org 镜像获取了最新的 2.2 系列内核,并将 AIC-7xxx 驱动程序构建到内核中,而不是作为模块。 然后我使用新内核重新启动,并将所有内容复制到 SCSI 驱动器。

—Don Marti, dmarti@ssc.com

坏用户! 没有 “cd ..”!

我该怎么做才能使用户的目录像根目录一样,用户只能访问该目录或子目录?

—Rafael, rafaelss@ig.com.br

您需要的是 chroot。 许多 FTP 守护进程默认情况下会 chroot。 如果您希望 Telnet(或者更好的 SSH)进行 chroot,您可以创建一个 chroot shell。 有关更多信息,请访问 freshmeat.net/projects/jail_c

—Ben Ford, ben@kalifornia.com

一旦您将用户限制在,比如说,/home/user 中,如果您希望 chroot 用户能够运行任何命令,您必须使 /lib 和 /bin 的某些部分在 /home/user 下可用。

—Marc Merlin, marc_bts@valinux.com

我没有 DNS,我必须使用 wvdial。

我正在尝试使用外部终端适配器连接到我的 ISP。 但是当 wvdial 连接时,我收到以下错误

--> warning, can't find address for 'suse.de'
--> warning, address lookup does not work
--> Nameserver (DNS) failure, the connection may
    not work

—Mitko, mitak@post.com

检查 /etc/resolv.conf 并确保您有以下行

nameserver aaa.bbb.ccc.ddd

其中 aaa.bbb.ccc.ddd 是工作正常的 DNS 服务器的 IP 地址。 您还可以查看 /var/log 中的 PPP 日志,以获取有关问题所在的提示。

—Felipe E. Barousse Boué, fbarousse@piensa.com

加载 Disqus 评论