ld terminated with signal 9 [Killed];swap;tmpfs
http://blog.csdn.net/imxiangzi/article/details/7453035
当时内存几乎用完了,发生这个错误是因为内存不够,编译不过来。系统是ubuntu 11.04, 2G的物理内存不够,swap分区是1G。
CXXLD libwebkitgtk-1.0.la
collect2: ld terminated with signal 9 [Killed]
make[1]: *** [libwebkitgtk-1.0.la] Error 1
make[1]: Leaving directory `/home/cselken/Downloads/webkit/WebKitBuild/Debug'
make: *** [all] Error 2
Failed to build WebKit using 'make'!
解决方法是增大交换分区的大小。
https://help.ubuntu.com/community/SwapFaq#How%20do%20I%20add%20more%20swap?
Four-step Process to Add Swap File
1 Creating a file the size you want.
2 Formatting that file to create a swapping device.
3 Adding the swap to the running system.
4 Making the change permanent.
For Adding a 512 MB swap examp
1 Creating a file for 512 MB size you want:
We will create a /mnt/512Mb.swap swap file and set the permissions so that users cannot read it directly.
sudo fallocate -l 512m /mnt/512Mb.swap sudo chmod 600 /mnt/512Mb.swap
fallocate length suffixes are: k, m, g, t, p, e (See man fallocate).
By default your swap file may be created world readable. We set the 600 mode permissions in order to prevent users from being able to read potentially sensitive information from the swap file.
2 Formatting that file to create a swapping device:
sudo mkswap /mnt/512Mb.swap
3 Adding the swap to the running system:
sudo swapon /mnt/512Mb.swap
The additional swap is now available and can be seen by "cat /proc/meminfo"
4 Making the change permanent:
Edit the /etc/fstab:
gksudo gedit /etc/fstab
Add this line at the end of the file:
/mnt/512Mb.swap none swap sw 0 0
Save. After the next reboot the swap will be used automatically.
Example of making a swap file
This is an example of making and using a swap file on a computer with no swap partition.
user@computer:~$ sudo fallocate -l 512m /mnt/512Mb.swap
Password:
user@computer:~$ sudo mkswap /mnt/512Mb.swap
Setting up swapspace version 1, size = 536866 kB no label, UUID=dd6a01c8-93f0-41e0-9b7a-306956d8821b
user@computer:~$ sudo swapon /mnt/512Mb.swap
user@computer:~$ cat /proc/meminfo
MemTotal: 499496 kB
MemFree: 9156 kB
Buffers: 4748 kB
Cached: 233140 kB
SwapCached: 724 kB
Active: 254432 kB
Inactive: 157920 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 499496 kB
LowFree: 9156 kB
SwapTotal: 524280 kB
SwapFree: 523556 kB
Dirty: 128 kB
Writeback: 0 kB
Mapped: 243420 kB
Slab: 20672 kB
CommitLimit: 774028 kB
Committed_AS: 648680 kB
PageTables: 2224 kB
VmallocTotal: 524280 kB
VmallocUsed: 5708 kB
VmallocChunk: 518176 kB
user@computer:~$ gksudo gedit /etc/fstab
user@computer:~$ free
total used free shared buffers cached
Mem: 499496 479488 20008 0 8256 215892
-/+ buffers/cache: 255340 244156
Swap: 524280 3856 520424 #####Then, after running a few more programs...
user@computer:~$ free
total used free shared buffers cached
Mem: 499496 492768 6728 0 1240 142336
-/+ buffers/cache: 349192 150304
Swap: 524280 53384 470896 #####Next, reboot to make sure it will work consistently.
user@computer:~$ free
total used free shared buffers cached
Mem: 499496 493136 6360 0 7528 174700 -/+ buffers/cache: 310908 188588 Swap: 524280 17148 507132
http://bbs.chinaunix.net/thread-466075-1-1.html
昨天,同学要装gentoo,但他的机器比较慢,现在又没有时间编译
我就想了个办法把我的硬盘挂到他的机器上,然后启动到我的一个后备系统下
再把我的主系统cp -a全拷给他(我们的硬件配置差不多)
挂好硬盘,设好jump,顺利进入系统,我的盘是/dev/hda他的是hdb,hdb5是要设成swap分区的,我就mkswap /dev/hdb5,但敲成了/dev/hda5,一字之差,我后悔啊(hda5是我的主系统分区啊)
我想数据应该还没丢吧,只是一秒钟的事,mkswap就做完了
有什么方法恢复吗?
http://www.linuxsir.org/bbs/thread166420.html?pageon=1#973087
背景见此帖http://www.linuxsir.com/bbs/showthread.php?t=163198&page=1&pp=15
如果系统提供什么unmkswap之类的命令,我就不必在此婆婆妈妈了.可惜一直没找到,我才有机会在此唠叨.
本方法的适用前提大概有一下几点
1.mkswap前的分区的文件系统必须是ext2/ext3
2.尚未swapon该分区
3.必须有另一个linux系统(有root权限)或livecd
其实,修复的步骤很简单,直须要一两个命令就行了.但最重要的是知其所以然.
1.原理
先熟悉一下文件系统吧.
ext2/3最重要应该要算超级块了.超级块存储在文件系统的块1(从0开始编号)中,包含了编档系统配置的所有信息,而且用mount命令装载文件系统时,是要检查超级块的,如果不符合要求则会装载失败.
至于mkswap的实现可以在util-linux包的disk-utils目录下找到(开源的好处呵呵).
看一下代码可知mkswap调用init_signature_page()和write_signature()函数处理signature_page指针指向的内存区,然后把该内存区的内容通过write系统调用写回磁盘分区的前1536-4096(version 1)或512-4096(version 0)处, 而该处正是分区超级块的位置.
难怪mkswap后文件系统就mount不上去了:(
超级块都被覆盖了,难道只能束手待毙吗?
不,文件系统的设计者早就留了一手后招
看一下ext2fs的结构图:
- ---------------------------------------
- |引导扇区 | 块组0 |...... | 块组N-1 | 块组N | <== 分区结构
- ---------------------------------------
- / \
- / \
- / \
- / \
- / \
- |----------------------------------------------------|
- | 超级块 | 组描 | 块位图 | 信息节点 | 信息节|数据 |
- | |述符 | | 位图 |点表 | | <== 块组结构
- |----------------------------------------------------|
磁盘上块与块之间并不是孤立的,为了访问的效率,许多相邻的块又被组织成块组.基于超级块的重要性,它的备份副本存储在整个文件系统的块组中(啊,早就知道天无绝人之路^_^).我看的资料上说每个块组都会保留一份副本,但以我的实践来看,并不全然,也许是为了节省空间吧.
- # mke2fs -n /dev/hda5
- mke2fs 1.35 (28-Feb-2004)
- Filesystem label=
- OS type: Linux
- Block size=4096 (log=2)
- Fragment size=4096 (log=2)
- 647680 inodes, 1293224 blocks
- 64661 blocks (5.00%) reserved for the super user
- First data block=0
- 40 block groups
- 32768 blocks per group, 32768 fragments per group
- 16192 inodes per group
- Superblock backups stored on blocks:
- 32768, 98304, 163840, 229376, 294912, 819200, 884736
注意,-n使mke2fs不真正格式化分区,而只打印分区后的信息.
留意一下最后两行以及每个块组中包含的块的数目,就可算出到底哪几个块组中存在备份的超级块了
其次,分区中超级块的副本数目也是和块大小息息相关的
- # mke2fs -n /dev/hda5 -b 1024
- mke2fs 1.35 (28-Feb-2004)
- Filesystem label=
- OS type: Linux
- Block size=1024 (log=0)
- Fragment size=1024 (log=0)
- 647168 inodes, 5172896 blocks
- 258644 blocks (5.00%) reserved for the super user
- First data block=1
- 632 block groups
- 8192 blocks per group, 8192 fragments per group
- 1024 inodes per group
- Superblock backups stored on blocks:
- 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
- 1024001, 1990657, 2809857, 5120001
可以看出,前者的块大小是4k,而后者是1k,块越小,每个块组包含的块数也会减少,超级块的副本数会增加.
虽然文件系统中超级块存在不止一份,但在装载文件系统时,通常只读取块组0中的超级块.如果超级块损坏,则装载出错,并且提示运行e2fsck.
e2fsck默认也是读取块组0中的超级块,但这一行为会受-b参数的影响.
- # mount /dev/hda5 /mnt
- /dev/hda9 looks like swapspace - not mounted
- mount: you must specify the filesystem type
- # e2fsck /dev/hda5
- e2fsck 1.35 (28-Feb-2004)
- e2fsck: Bad magic number in super-block while trying to open /dev/hda5
- The superblock could not be read or does not describe a correct ext2
- filesystem. If the device is valid and it really contains an ext2
- filesystem (and not swap or ufs or something else), then the superblock
- is corrupt, and you might try running e2fsck with an alternate superblock:
- e2fsck -b 8193 <device>
- # e2fsck /dev/hda5 -b 8139 [COLOR=DarkGreen]<==看到了吧,8139块上并不一定有超级块的备份[/COLOR]
- e2fsck 1.35 (28-Feb-2004)
- e2fsck: Bad magic number in super-block while trying to open /dev/hda5
- The superblock could not be read or does not describe a correct ext2
- filesystem. If the device is valid and it really contains an ext2
- filesystem (and not swap or ufs or something else), then the superblock
- is corrupt, and you might try running e2fsck with an alternate superblock:
- e2fsck -b 8193 <device>
由此可知8193块中并不一定有超级块的副本,这是由块组中块的数目决定的,而归根结底又取决于块的大小.如果你创建分区时用了默认的块大小,则可用mke2fs -n命令打印出超级块副本所在块的块号,然后以所得块号为参数,运行e2fsck,系统会自动修复块组0中的超级块. 修复完后就可以成功挂载了.
2.修复
步骤很简单
因为我创建分区时用的是默认参数,现在只要用mke2fs -n找出超级块备份的位置,然后用e2fsck修复就行了
- # mke2fs -n /dev/hda5
- mke2fs 1.35 (28-Feb-2004)
- Filesystem label=
- OS type: Linux
- Block size=4096 (log=2)
- Fragment size=4096 (log=2)
- 611648 inodes, 1222940 blocks
- 61147 blocks (5.00%) reserved for the super user
- First data block=0
- 38 block groups
- 32768 blocks per group, 32768 fragments per group
- 16096 inodes per group
- Superblock backups stored on blocks:
- 32768, 98304, 163840, 229376, 294912, 819200, 884736
- #e2fsck -b 32768 /dev/hda5
接下来只要一路按y,系统就会自动把超级块修好
3.未竞之业
理论上,了解了e2fsck的工作原理以及super-block的位置,应该可以自行编制程序备份和恢复super-block. 如果有时间或许会尝试一下.
还有另一个取巧想法是用dd把引导记录和块组0的super-block一起备份起来, 然后直接用dd恢复, 不知可行否
这些留待以后再说吧
我要说的差不多就这么多了,小弟浅陋,谬误之处请大虾们斧正
p.s. 感谢所有帮助过我的xdjm们
http://www.linuxsir.org/bbs/thread380468.html
不谢.你可以 用增加swap分区或swap文件的方式 来增加tmpfs的max size,但效率可能是个问题,同时浪费大量硬盘空间
http://blog.csdn.net/weiwangsisoftstone/article/details/38581843
如何修改/dev/shm大小?
/dev/shm在/etc/fstab中挂载,对应tmpfs,实际使用的是内存的空间。默认情况下,/dev/shm为物理内存大小的一半。因而,调整/dev/shm大小有两种方式:
1. 加大Linux的物理内存
2. 在/etc/fstab中明确指定/dev/shm的挂载sizes大小参数
1
2
3
|
[root@centos-fuwenchao mntsda3]# df -h /dev/shm Filesystem Size Used Avail Use% Mounted on tmpfs 935M 228K 935M 1 % /dev/shm |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@centos-fuwenchao mntsda3]# vi /etc/fstab 1 2 # 3 # /etc/fstab 4 # Created by anaconda on Fri Nov 1 21 : 18 : 42 2013 5 # 6 # Accessible filesystems, by reference, are maintained under '/dev/disk' 7 # See man pages fstab( 5 ), findfs( 8 ), mount( 8 ) and/or blkid( 8 ) for more info 8 # 9 UUID=8e319772-a274- 4031 -a53f-1178b3ab4de6 / ext4 defaults 1 1 10 UUID=ad4de750- 9575 - 4040 -a403-08c0642f0f2c swap swap defaults 0 0 11 tmpfs /dev/shm tmpfs defaults 0 0 12 devpts /dev/pts devpts gid= 5 ,mode= 620 0 0 13 sysfs /sys sysfs defaults 0 0 14 proc /proc proc defaults 0 0 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@centos-fuwenchao mntsda3]# cp /etc/fstab /etc/fstab. 20140218 [root@centos-fuwenchao mntsda3]# vi /etc/fstab 1 2 # 3 # /etc/fstab 4 # Created by anaconda on Fri Nov 1 21 : 18 : 42 2013 5 # 6 # Accessible filesystems, by reference, are maintained under '/dev/disk' 7 # See man pages fstab( 5 ), findfs( 8 ), mount( 8 ) and/or blkid( 8 ) for more info 8 # 9 UUID=8e319772-a274- 4031 -a53f-1178b3ab4de6 / ext4 defaults 1 1 10 UUID=ad4de750- 9575 - 4040 -a403-08c0642f0f2c swap swap defaults 0 0 11 tmpfs /dev/shm tmpfs defaults,size=1024M 0 0 12 devpts /dev/pts devpts gid= 5 ,mode= 620 0 0 13 sysfs /sys sysfs defaults 0 0 14 proc /proc proc defaults 0 0 |
重新挂载
1
2
3
4
5
6
7
|
[root@centos-fuwenchao mntsda3]# mount -o remount /dev/shm [root@centos-fuwenchao mntsda3]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 9 .7G 4 .6G 4 .7G 50 % / tmpfs 1 .0G 228K 1 .0G 1 % /dev/shm /dev/sr0 4 .1G 4 .1G 0 100 % /media/CentOS_6.4_Final /dev/sda3 38G 176M 36G 1 % /mnt/mntsda3 |
http://www.tmtpost.com/43815.html
http://www.tmtpost.com/43815.html
巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。
首先让我们认识一下,什么是tmpfs和/dev/shm/?
tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储暂存的文件。它有如下2个优势 : 1. 动态文件系统的大小。2. tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在内存 RAM 中,读写几乎可以是瞬间的。同时它也有一个缺点 tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。
tmpfs不具备持久性,重启后数据不保留,请务必注意!!!
/dev/shm/是一个设备文件,它使用就是tmpfs文件系统(注意:在Centos和Redhat下,/dev/shm目录是一个链接,指向/run/shm目录,在Ubuntu系统下tmpfs文件系统对应的是/run/shm目录,可以使用df命令查看),因为 /dev/shm/这个目录不在硬盘上,而是在内存里,它就所谓的tmpfs。在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。 比如我的的Red Hat Enterprise Linux Server 5.4 64(单核,512内存)分配内存为512M,所以/dev/shm为250M左右,查看/dev/shm如下:
[root@AY1212111202285f63122 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 20G 7.6G 11G 42% /
tmpfs 250M 0 250M 0% /dev/shm
tmpfs是基于内存的文件系统,创建时不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改为512M,修改/etc/fstab的
tmpfs /dev/shm tmpfs defaults 0 0
改为
tmpfs /dev/shm tmpfs,defaults,size=512m 0 0
所以修改前:
LABEL=/ / ext3 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
修改后为:
LABEL=/ / ext3 defaults 1 1
tmpfs /dev/shm tmpfs,defaults,size=512m 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
然后执行mount -o remount /dev/shm
[root@AY1212111202285f63122 ]# mount -o remount /dev/shm
[root@AY1212111202285f63122 ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 20G 7.6G 11G 42% /
tmpfs 512M 0 512M 0% /dev/shm
怎么样,变成512M啦,使用很方便吧,重启也没有问题的,哈哈。当然在生产环境中你可以把内存加大些,反正现在内存很便宜啦,为了提高性能也需要将/dev/shm加大。
tmpfs(/dev/shm)的使用及应用场景
tmpfs是基于内存的,速度是不用说的,硬盘和它没法比。Oracle 中的Automatic Memory Management特性就使用了/dev/shm。另外如果在网站运维中好好利用tmpfs,将有意想不到的收获。我们先在/dev/shm建一个tmp目前,并与/tmp绑定。
[root@AY1212111202285f63122 ~]# mkdir /dev/shm/tmp
[root@AY1212111202285f63122 ~]# chmod 1777 /dev/shm/tmp //注意权限
[root@AY1212111202285f63122 ~]# mount –bind /dev/shm/tmp /tmp
[root@AY1212111202285f63122 ~]# ls -ld /tmp
drwxrwxrwt 2 root root 40 May 29 21:46 /tmp
以下/tmp使用tmpfs文件系统的一些应用示例,一般tmpfs内存文件系统在做web缓存,临时文件存储时会对web访问有很好的加速作用,从而提高网站访问的速度。
1.将squid的缓存目录cache_dir放到/tmp下
vi /etc/squid/squid.conf 修改成 cache_dir ufs /tmp 256 16 256
这里的第一个256表示使用256M内存,重启一下squid服务,这样缓存目录都放在了tmpfs文件中了,速度不用说吧。
2.将php的session文件放在/tmp下
对于一个访问量大的以apache php的网站,可能tmp下的临时文件都会很多,比如seesion或者一些缓存文件,那么你可以把它保存到tmpfs文件。保存seesion的方法很简单了:只要修改php.ini就行了,通过phpinfo测试文件查看你的php session存储位置,如果不在/tmp下,修改php.ini文件,修改如下:
session.save_path = “/tmp”
3.将服务的socket文件放在/tmp下
如nginx.socket和mysql.sock
至于tmpfs的其他应用,我想大家可能通过这篇文章会有所启发。再次强调下:tmpfs 数据在重新启动之后不会保留,重启tmpfs 数据会丢失,所以有必要做一些脚本做诸如加载,绑定的操作!
http://blog.csdn.net/heyutao007/article/details/7051269
一、/dev/shm理论
默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录。可以通过df 命令查看结果.
/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。
tmpfs有以下优势:
1。动态文件系统的大小,/dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的
2。tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
3。tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。
二、修改/dev/shm大小
默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在2G的机器上,将最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件。
如果需要永久修改/dev/shm的值,需要修改/etc/fstab
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0
mount -o remount /dev/shm
三、/dev/shm应用
首先在/dev/shm建个tmp文件夹,然后与实际/tmp绑定
#mkdir /dev/shm/tmp
#chmod 1777 /dev/shm/tmp
#mount –bind /dev/shm/tmp /tmp(–bind )
在使用mount –bind olderdir newerdir命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性,除了名称。Oracle 11g的amm内存管理模式就是使用/dev/shm,所以有时候修改MEMORY_TARGET或者MEMORY_MAX_TARGET会出现ORA-00845的错误