问题
我想在 Linux 上的 SSD 磁盘内的交换分区上启用后台TRIM 操作。根据几篇文章,例如这篇文章,内核会检测此配置并自动执行丢弃操作,但在我的测试中,尽管使用“丢弃”挂载选项来强制执行此行为,但它似乎不起作用。
设想
背景
这些是我用来检查后台 TRIM 是否在交换分区上工作的步骤:
TRIM 支持:检查 SSD 磁盘是否支持 TRIM 命令并且内核将设备标记为非旋转:
# hdparm -I /dev/sda | grep TRIM
* Data Set Management TRIM supported (limit 1 block)
* Deterministic read data after TRIM
# cat /sys/block/sda/queue/rotational
0
Run Code Online (Sandbox Code Playgroud)交换填充:挂载分区,清理所有 VM 缓存并配置 Linux 以积极交换,将 vm.swappiness 设置为 100。然后,运行一个脚本来分配所有可用内存并强制内核开始交换:
# swapon [--discard] /dev/sda2
# …Run Code Online (Sandbox Code Playgroud)我有一个 8GB RAM 的 linux 盒子,上面运行着 4 个 tomcat 服务器。其中之一设置为 3000MB 内存(jvm -Xms 和 -Xmx 设置),其他设置为 1500MB。交换分区也设置为 8Gigs。当我启动这些服务器时,交换文件使用率很低。但是在一段时间内以及在一个/所有服务器处于活动高峰期的某些时间段内,交换使用量开始增加。这是典型的 sar -r 输出。
kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
48260 8125832 99.41 196440 2761852 7197688 1190912 14.20 316044
75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032
它显示当前使用了 14.2% 的交换。有趣的是这 % 永远不会减少。它继续增加并达到30-40%。我们每周重新启动我们的服务器。
我会假设%swpused在活动高峰期会增加,而在活动低潮期会减少……或者至少保持不变。这看起来交换空间永远不会被操作系统回收..
free 的输出:free -m 缓存的已用空闲共享缓冲区总数:7982 7937 45 0 32 2088 -/+ 缓冲区/缓存:5816 2166 交换:8191 1163 7028
所以至少有 2g 的免费 …
如果您在 GNU/Linux 系统上实现了任何类型的块设备加密,那么也应该加密您的交换分区,因为任何解密的数据都可能随时以明文形式写入交换分区。
查看“crypttab”的 debian 手册页,我看到了一个在启动时创建随机键控交换分区的示例,因此在启动过程中密钥是随机设置的,并且只有系统本身知道:
# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap
Run Code Online (Sandbox Code Playgroud)
在此示例中,交换设备由常规开发路径引用,即 /dev/sda6
例如,如果插入了 USB 驱动器,则绝对设备路径可能会更改并在启动时重新分配。如果/dev/sda6碰巧是与预期不同的分区并且随后被随机交换数据覆盖,用户会非常不高兴!!
所以解决方案似乎是:使用 UUID 而不是设备路径(因为 UUID 不应该改变),替换/dev/sda6为/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>
但是……问题来了:每次 cryptsetup 在启动时重新创建加密的交换分区时,它都会为它生成一个新的 UUID!哦!
所以我们需要以某种方式保留这个加密文件系统的 UUID。我认为 cryptsetup 可以通过它的--offset开关来做到这一点,允许保留 LUKS 标头,从而保留 UUID。
我找到了这个网址:https : //wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions
有谁知道如何在 Debian 操作系统上实现为 Arch Linux 描述的解决方案?文档中提到的 init 脚本在 Debian 操作系统上似乎不存在
谢谢!
编辑
可以使用ecryptfs使用以下命令实现相同的目的(加密交换空间):
ecryptfs-setup-swap
没有困扰块设备加密的问题。看看这个 AskUbuntu 查询
我管理运行 IIS 和 .NET4 Web 应用程序的 Windows 2008 服务器(好吧,在 Amazon EC2 上)。前几天我收到了内存警报,然后去查看,果然进程内存通过某种缓慢泄漏随着时间的推移而增长。它没有增长太多,就像 60M 到 200M 一样,但由于盒子已经超过了我们相当低的阈值 (75%),所以它已经超出了我们的显示器。
我回收了应用程序的池并释放了内存,我在查看统计信息时注意到交换空间被大量使用,并且通过回收释放了超过 1 GB 的空间。
也许这是一个基本问题,但我是一个 UNIX 人,我习惯于在内存不足之前交换不习惯。这个盒子从来没有超过 75% 的内存使用量。这是 Windows 的东西还是 .NET 的东西还是亚马逊的东西?我怀疑这个应用程序中的内存泄漏比怀疑的要大得多 - 它不是从 60M 泄漏到 200M,而是从 60M 泄漏到 1.2GB,但其中大部分都以某种方式变得“冷”并被推出交换?
我在应用程序池上设置了内存回收,但它触发了盒子满内存,所以这个应用程序可能会在它自动回收之前变得非常非常大。
我可以设置定期的“定时”回收,但这是一种解决方法,我会让开发人员修复应用程序,但需要了解交换使用情况,以确保我正确理解这一点。
使用更多信息进行编辑:实例内存:1.7 GB 交换:4.5 GB
我在 taskmgr 中看到 w3wp.exe 进程显示内存:211,000k。但是当我重新启动它时(它在它自己的应用程序池中,并且它是盒子上唯一的应用程序),它的内存使用量下降到 60M 的正常起始点,并且像 1 GB+ 的交换也被释放了。在 taskmgr 中,我刚刚设置了通常的内存(私有工作集)状态,但通过我的其他监控(Cloudkick)看到了交换更改。今天回过头来看看,进程中的内存恢复到 195M(总共 1.2 GB)并且交换已经从 1.0 GB 攀升到 1.1 GB,并没有完全恢复到原来的位置(随着时间的推移,这是一个缓慢蠕变)。
我不太关心这个特定的应用程序,而更关心只是了解 Windows 何时交换以及它如何使用它,以及通常需要关注给定的 Windows 内存和交换使用情况。
我有 Linux 服务器,并且有一个备用的 500GB 磁盘分区。我想格式化它并将其用于/tmp。服务器偶尔会运行一些大数据处理任务,因此 /tmp 可能会保存 GB 的临时数据。
然后我有了一个想法,我可以将它添加为交换分区,然后将 /tmp 挂载到 tmpfs。这个想法合理吗?
服务器有 6GB 的 RAM,因此在大多数情况下 /tmp 上的数据只会在 RAM 中,具有明显的速度优势。问题是,如果 /tmp 上有 10-20GB 的数据,系统将如何执行?与简单地将 /tmp 挂载到 ext4 分区相比,性能如何?感谢帮助。
编辑:很明显,当 tmpfs 的使用量达到 RAM 限制时,系统将开始换出内存。但是 Linux 是否足够智能以换出 tmpfs 数据并将“常规”数据保存在 RAM 中?如果是,那么我想它的行为是合理的。如果没有,那么整个系统将受到严重影响。
当我运行 htop(在 OS X 10.6.8 上)时,我看到如下内容:
1 [||||||| 20.0%] 任务:总共 70 个,运行 0 个 2 [||| 7.2%] 平均负载:1.11 0.79 0.64 3 [||||||||||||||||||||||||81.3%] 正常运行时间:00:30:42 4 [|| 5.8%] 内存[||||||||||||||||||||3872/4096MB] 交换[0/0MB] PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ 命令 284 501 57 0 15.3G 1064M 0 S 0.0 6.5 0:01.26 /Applications/Firefox.app/Contents/MacOS/firefox -psn_0_90134 437 501 57 0 14.8G 785M 0 S 0.0 4.8 0:00.18 /Applications/Thunderbird.app/Contents/MacOS/thunderbird -psn_0_114716 428 501 63 0 12.8G 351M 0 S 1.0 2.1 0:00.51 /Applications/Firefox.app/Contents/MacOS/plugin-container.app/Contents/MacOS/ 696 501 …
这是输出df -k:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 10317860 7059008 2734732 73% /
none 847584 0 847584 0% /dev/shm
/dev/xvdb 153899044 192068 145889352 1% /mnt/ephemeral
Run Code Online (Sandbox Code Playgroud)
我正在使用 Centos EBS 启动映像。
我已经阅读了有关此的各种问题,但他们告诉要安装新驱动器。但我认为该驱动器已经安装在/dev/xvdb. 我对么?
我可以用这个吗:
mkswap -f /dev/xvdb
#add in /etc/fstab
/dev/xvdb swap swap defaults 0 0
swapon /dev/xvdb
Run Code Online (Sandbox Code Playgroud)
它会起作用吗?
我有 2 个 LAMP Web 服务器,它们经常用完交换空间(请参阅附加的顶部屏幕截图)。
Apache的设置如下:
<IfModule prefork.c> 启动服务器 64 最小备用服务器 64 最大备用服务器 128 服务器限制 256 第 256 章 MaxRequestsPerChild 4096 </IfModule>
PHP 的资源限制是:
最大执行时间 = 30 最大输入时间 = 30 内存限制 = 80M
我是这样的服务器管理员的新手(我是一名开发人员);我可以调整什么来防止交换?
什么时候交换移回 Linux 中的物理内存?是否仅按需提供,即。什么时候需要?或者当计算机不处于高负载时,swap 是否缓慢转移到物理内存?
我们公司的网站刚刚从共享主机转移到 VDS,因为托管公司计划淘汰不太可靠的共享托管服务器。
VDS 只有 256MB 的 RAM 并托管了几个站点,除了其中一个站点之外,所有站点都是非常简单的静态站点,只有几页,并且每天服务的访问者少于 20-30。
我们的主站点运行一个稍微定制的 OSCommerce 版本,流量也很低(很少超过 10 个左右的并发用户),但确实需要 MySQL。不幸的是,由于移动mysqld由于内存不足而不断崩溃。我稍微编辑了 Apache 配置(以减少线程数)以减轻负载,但这只是回避了真正的问题。
服务器没有交换空间,但它的磁盘空间确实比我们需要的多得多,所以我正在考虑使用其中的一些空间进行交换。我知道这不会完全有助于性能,但我们可以忍受。
如何在服务器运行时创建交换文件并启用它?操作系统是 CentOS 5.5(最终版),Linux 不是我的母语。
更新:对于任何可能想知道结果的人来说,由于实现了 quanta 描述的交换文件,服务器不仅稳定,mysqld 没有更多的崩溃,它实际上比以前更快地提供页面。性能提升与我的预期相反,但我很高兴在这种情况下是错误的。