当前位置: 首页 > news >正文

网站注销主体注销创业园区网站建设

网站注销主体注销,创业园区网站建设,购物网站开发周期,wordpress分类删不掉HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap。ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备。对要换出#xff08;swapout#xff09;的页面进行压缩后#xff0c;不是写入磁盘#xff0c;而是写入内存。可以使用的内存仅为完成压… HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap。ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备。对要换出swapout的页面进行压缩后不是写入磁盘而是写入内存。可以使用的内存仅为完成压缩的部分。压缩处理使用的是LZO注1。ramzswap是从Linux 2.6.33合并到Staging驱动程序的。Staging驱动程序是指尚未达到某种程度的质量的试验性驱动程序。通过使用ramzswap运转速度可以比换出到一般磁盘设备时更高。这是因为内存的I/O较快且经过压缩后I/O变小。只有用于嵌入式系统的内存等的机器中可以避免内存不足时由于内存回收处理导致性能极端下降或抑制OOM Killer的运行。ramzswap的项目在如下环境中即使减去压缩/解压缩的CPU系统开销也可以提高性能。上网本或瘦客户机thin client这种配备了内存容量小但CPU性能较高的的PC。在组装机器上不想在外部闪存存储器flash memory storage中生成交换区时。使用ramzswap时可以使用已经整合到上游内核的也可以从论坛中下载并使用。整合到上游内核的ramzswap实际安装了论坛的部分成果。本节将针对上游内核和论坛版内核进行介绍。Linux内核以2.6.35为例论坛数据包以版本0.6.2为例。操作系统使用Fedora 12。使用论坛版ramzswap使用论坛版的数据包时首先需要下载数据包进行编译。由于要对内核模块进行编译因此必须事先安装kernel-devel。 $ wget http://compcache.googlecode.com/files/compcache-0.6.2.tar.gz $ tar zxvf compcache-0.6.2.tar.gz $ cd compcache-0.6.2/ $ make make命令结束后将生成内核模块ramzswap.ko和ramzswap设备的控制工具—rzscontrol命令和rzscontrol命令的manual文件。小贴士ramswap版本0.6.2的运行已经在Linux 2.6.32中确认。使用RHEL6编译时需要在ramzswap_drv.c的最前面加上#include 。rzscontrol命令创建的路径为compcache-0.6.2/sub-projects/rzscontrol/rzscontrolmanual文件创建的路径为compcache-0.6.2/sub-projects/rzscontrol/man/rzscontrol.1。ramzswap版本0.6.2不会通过make命令自动安装。可以直接使用这些文件。ramzswap的使用方法有两种。一种是在内存中创建虚拟交换区磁盘的ramzswap disk另一种是在使用内存的同时使用交换文件或交换块设备的backing swap。一般系统与使用ramzswap disk、backing swap系统的内存和交换区的关系如图2-2所示。 图2-2 一般系统与使用ramzswap disk、backing swap的系统的内存和交换区的关系首先介绍第一个ramzswap disk。ramzswap disk的使用方法使用ramzswap disk首先需要将用来压缩/解压缩数据的LZO模块安装到内核中。 # modprobe lzo_compress #modprobe lzo_decompress注意事项在部分发布版Fedora14等中把lzo_decompress模块静态安装到内核中有时会因为没有模块而导致modprobe失败。 # modprobe lzo_decompress FATAL:Module lzo_decompress not found.没有模块也没有静态安装到内核时对ramzswap.ko执行insmod命令就会出现如下错误。 # insmod ramzswap.ko insmod: error inserting ramzswap.ko: -1 Unknown symbol in module自己构建内核时请将CONFIG_LZO_DECOMPRESS设置为y或m。把像Fedora 14这样lzo_decompress静态安装到内核的情况下ramzswap.ko的insmod会成功。接下来安装ramzswap模块。这里将设置num_devices4以生成4个设备文件。 # insmod ./ramzswap.ko num_devices4 # ls /dev/ramzswap* /dev/ramzswap0 /dev/ramzswap1 /dev/ramzswap2 /dev/ramzswap3 # lsmod Module Size Used by ramzswap 21108 0 lzo_decompress 2768 1 ramzswap lzo_compress 2480 1 ramzswap ...... 将ramzswap模块安装到内核的同时还可以设置各参数。下面是设置作为ramzswap disk使用的内存大小的例子。 insmod ramzswap.ko num_devices4 disksize_kb20480 只有/dev/ramzswap0的初始化后面介绍--init选项和disksize_kb参数设置是自动进行的。/dev/ramzswap1~3的初始化和disksize_kb参数需要另行设置。后面也可以在rzscontol命令中设置相同参数。但是num_devices只能在安装模块时进行设置。表2-9所示为可设置的参数列表。其内容将在后面详细说明。表2-9 ramzswap的模块参数与rzscontrol命令的选项 安装ramzswap模块后为了作为交换区使用对ramzswap设备进行初始化并启用交换功能。 # sub-projects/rzscontrol/rzscontrol /dev/ramzswap0 - -init # swapon /dev/ramzswap0这时也可以使用-p选项指定优先级与已有的交换设备同时使用。这个值较大表示优先级较高因此应当指定比一般的交换设备更大的值。 # swapon -p 100 /dev/ramzswap0 # swapon -s Filename Type Size Used Priority /dev/ramzswap0 partition 511992 0 100 /dev/sda2 partition 2047992 0 -1 这时ramzswap设备的交换功能就已启用。使用一定数量的内存后就会发生换出。可以使用rzscontrol命令的--stats选项来确认ramzswap的统计信息和状态。 # sub-projects/rzscontrol/rzscontrol /dev/ramzswap --stats表2-10为此时的输出结果和各项目的说明。表2-10 执行ramzswap disk命令时rzscontrol --stats的输出结果 由于ramzswap不会立刻释放保留的内存因此OrigDataSize和free命令的数值不一定一致。rzscontrol命令也可以对各个ramzswap设备进行设置。使用--disksize_kb选项可以设置ramzswap设备的大小单位为千字节。执行下列命令就可以设置ramzswap设备的容量。 # sub-projects/rzscontrol/rzscontrol /dev/ramzswap0 --init --disksize_kb10240要将ramzswap设备排除在交换对象之外可以使用swapoff命令。 # swapoff /dev/ramzswap0要关闭ramzswap需要在swapoff之后使用rzscontrol命令的--reset选项释放残留在ramzswap磁盘中的内存。最后将模块从内核中移除。 # sub-projects/rzscontrol/rzscontrol /dev/ramzswap0 --reset # rmmod ramzswapbacking swap的使用方法ramzswap还有另一种使用方法就是将部分内存作为ramzswap disk使用再将交换文件或交换块设备作为backing swap使用。ramswap为内存和磁盘的两层。如果内存稍有不足则仅使用内存的ramzswap disk进行处理但如果缺少更多内存则页面的内容存放到backing swap中。下面介绍backing swap的使用方法。首先与ramzswap disk同样进行设置。 # modprobe lzo_compress # modprobe lzo_decompress # insmod ./ramzswap.ko num_devices4然后使用rzscontrol命令指定backing swap。 # sub-projects/rzscontrol/rzscontrol /dev/ramzswap0 --init --backing_swap/dev/sda2 --memlimit_kb10240使用--backing_swap选项指定交换文件或交换块设备。这里指定的是块设备/dev/sda2。--memlimit_kb选项指定的是作为ramzswap disk使用的内存大小。使用内存的方式基本与ramzswap disk相同。没有指定时设置为所有内存大小的15%。这里设置为10240KB。最后启用已生成设备的交换功能。 # swapon /dev/ramzswap0内存使用量一旦增加首先压缩的页面会写入ramzswap disk的区域中。这时未压缩到50%以下的页面则写入backing swap中而非ramzswap disk中。另外超过--memlimit_kb选项指定的内存大小时也会写入backing swap中。表2-11所示为执行rzscontrol --stats的结果。说明中仅记载与ramzswap disk的不同之处。表2-11 执行ramzswap --stats的结果 使用上游内核的ramzswap要使用安装在上游内核的ramzswap需要首先启用内核configCONFIG_RAMZSWAPy编译内核。使用make menuconfig命令启用下列项目。 Device Drivers - Staging drivers- Compressed in-memory swap device (ramzswap)启动编译后的内核。使用方法使用方法与论坛版相同但需要另外编译用于上游内核的rzscontrol命令。由于上游内核驱动程序内没有安装backing swap因此必须修改rzscontrol命令的代码。上游内核中还没有安装backing swap和memlimit因此将这部分代码从这个补丁中删除。下面使用这个补丁来编译rzscontrol命令。 # wget http://compcache.googlecode.com/files/compcache-0.6.2.tar.gz # tar zxvf compcache-0.6.2.tar.gz # cd compcache-0.6.2/sub-projects/rzscontrol # patch -p1 ramzswap-for-2.6.35.patch 按照下列方式指定上游内核的include文件进行编译。 # gcc -g -Wall -D_GNU_SOURCE rzscontrol.c -o rzscontrol -I /linux-2.6.35/drivers/staging/ramzswap/ -I../include使用方法与论坛版相同。小结本节介绍了ramzswap。是否能够通过压缩页面数据受益是与内存数据的内容相关的。但是即使多少有一些压缩/解压缩的系统开销也比内存耗尽好得多。这在没有交换区的无磁盘diskless组装机器中尤其有效。参考文献compcache Compressed Caching for Linuxhttp://code.google.com/p/compcache/LZO1X Compressor from MiniLZOhttp://www.oberhumer.com/opensource/lzo/Compcache: in-memory compressed swappinghttp://lwn.net/Articles/334649/—Naohiro OoiwaHACK #16 OOM Killer的运行与结构本节介绍OOM Killer的运行与结构。Linux中的Out Of MemoryOOM Killer功能作为确保内存的最终手段可以在耗尽系统内存或交换区后向进程发送信号强制终止该进程。这个功能即使在无法释放内存的情况下也能够重复进行确保内存的处理过程防止系统停滞。还可以找出过度消耗内存的进程。本节将介绍2.6内核的OOM Killer。确认运行、日志进行系统验证或负载试验时有时会出现正在运行中的进程终止或者SSH连接突然断开、尝试重新登录也无法连接的情况。这时需要查看日志。有时会输出如下内核信息。 Pid: 4629, comm: stress Not tainted 2.6.26 #3Call Trace:[ffffffff80265a2c] oom_kill_process0x57/0x1dc[ffffffff80238855] __capable0x9/0x1c[ffffffff80265d39] badness0x16a/0x1a9[ffffffff80265f59] out_of_memory0x1e1/0x24b[ffffffff80268967] __alloc_pages_internal0x320/0x3c2[ffffffff802726cb] handle_mm_fault0x225/0x708[ffffffff8047514b] do_page_fault0x3b4/0x76f[ffffffff80473259] error_exit0x0/0x51Node 0 DMA per-cpu: CPU 0: hi: 0, btch: 1 usd: 0 CPU 1: hi: 0, btch: 1 usd: 0 ... Active:250206 inactive:251609 dirty:0 writeback:0 unstable:0free:3397 slab:2889 mapped:1 pagetables:2544 bounce:0 Node 0 DMA free:8024kB min:20kB low:24kB high:28kB active:8kB inactive:180kB present:7448kB pa ges_scanned:308 all_unreclaimable? yes lowmem_reserve[]: 0 2003 2003 2003 ... Node 0 DMA: 6*4kB 4*8kB 2*16kB 2*32kB 5*64kB 1*128kB 3*256kB 1*512kB 2*1024kB 2*2048kB 0*4096k B 8024kB Node 0 DMA32: 1*4kB 13*8kB 1*16kB 6*32kB 2*64kB 2*128kB 1*256kB 1*512kB 0*1024kB 0*2048kB 1*40 96kB 5564kB 29 total pagecache pages Swap cache: add 1630129, delete 1630129, find 2279/2761 Free swap 0kB Total swap 2048248kB Out of memory: kill process 2875 (sshd) score 94830592 or a child Killed process 3082 (sshd)最后出现了Out of memory内存不足。这就表示OOM Killer已经运行。无法重新连接的情况就是因为sshd被OOM Killer终止。如果不重新启动sshd就无法登录。OOM Killer通过终止进程来确保空闲内存接下来将介绍如何选定这个进程。进程的选定方法OOM Killer在内存耗尽时会查看所有进程并分别为每个进程计算分数。将信号发送给分数最高的进程。计算分数的方法在OOM Killer计算分数时要考虑很多方面。首先要针对每个进程确认下列19个事项再计算分数。1.首先计算分数时是以进程的虚拟内存大小为基准的。虚拟内存大小可以使用ps命令的VSZ或/proc//status的VmSize注2来确认。对于正在消耗虚拟内存的进程其最初的得分较高。单位是将1KB作为1个得分。消耗1GB内存的进程得分约为1 000 000。2.如果进程正在执行swapoff系统调用则得分设置为最大值unsigned long的最大值。这是因为禁用swap的行为与消除内存不足是相反的会立刻将其作为OOM Killer的对象进程。3.如果是母进程则将所有子进程内存大小的一半作为分数。 根据进程的CPU使用时间和进程启动时间调整得分。这是因为在这里认为越是长时间运行或从事越多工作的进程越重要需保持得分较低。首先用得分除以CPU使用时间以10秒为单位的平方根。如果CPU使用时间为90秒由于以10秒为单位因此就是用得分除以9的平方根“3”。另外根据进程启动开始的时间也可以调整得分。用得分除以启动时间以1000秒为单位的平方根的平方根。如果是持续运行16 000秒的进程则用得分除以16的平方根“4”的平方根“2”。越是长时间运行的进程就越重要。小贴士虽然源代码的备注中写有以10秒为单位、以1000秒为单位但是实际上在位运算中是以8和1024为单位来计算。5.对于通过nice命令等将优先级设置得较低的进程要将得分翻倍。nice-n中设置为1~19的命令的得分翻倍。6.特权进程普遍较为重要因此将其得分设置为1/4。7.通过capset(3)等设置了功能capabilityCAP_SYS_RAWIO注3的进程其得分为1/4。将直接对硬件进行操作的进程判断为重要进程。8.关于Cgroup如果进程只允许与促使OOM Killer运行的进程所允许的内存节点完全不同的内存节点则其得分为1/8。9.最后通过proc文件系统oom_adj的值调整得分。依据以上规则为所有进程打分向得分最高的进程发送信号SIGKILL到Linux 2.6.10为止在设置了功能CAP_SYS_RAWIO的情况下发送SIGTERM在没有设置的情况下发送SIGKILL。各进程的得分可以使用/proc//oom_score来确认。但是initPID为1的进程不能成为OOM Killer的对象。当成为对象的进程包含子进程时先向其子进程发送信号。向成为对象的进程发送信号后对于引用系统的全线程即使线程组TGID不同如果存在与对象进程共享相同内存空间的进程则也向这些进程发送信号。关于OOM Killer的proc文件系统下面开始介绍与OOM Killer相关的proc文件系统。/proc//oom_adj为/proc//oom_adj设置值就可以调整得分。调整值的范围为–16~15。正的值容易被OOM Killer选定。负值可能性较低。例如当指定3时得分就变为23倍当指定–5时得分就变为1/25。“–17”是一个特殊的值。如果设置为–17就会禁止OOM Killer发出的信号从Linux 2.6.12开始支持设置–17。在OOM Killer运行的情况下为了实现远程登录而想要将sshd排除在对象外时可以执行下列命令。 # cat /proc/cat /var/run/sshd.pid/oom_score 15 # echo -17 /proc/cat /var/run/sshd.pid/oom_adj # tail /proc/cat /var/run/sshd.pid/oom_* /proc/2278/oom_adj -17 /proc/2278/oom_score 0 /*得分变成0*/ 从Linux 2.6.18开始可以使用/proc//oom_adj。内容记载在Documentation /filesystems/proc.txt中。/proc/sys/vm/panic_on_oom将/proc/sys/vm/panic_on_oom设置为1时在OOM Killer运行时可以不发送进程信号而是使内核产生重大故障。 # echo 1 /proc/sys/vm/panic_on_oom /proc/sys/vm/oom_kill_allocating_task从Linux 2.6.24开始proc文件系统就有oom_kill_allocating_task。如果对此设置除0以外的值则促使OOM Killer运行的进程自身将接收信号。此处省略对所有进程的得分计算过程。 # echo 1 /proc/sys/vm/oom_kill_allocating_task这样就不需要参照所有进程但是也不会考虑进程的优先级和root权限等只发送信号。/proc/sys/vm/oom_dump_tasks从Linux 2.6.25开始将oom_dump_tasks设置为除0以外的值时在OOM Killer运行时的输出中会增加进程的列表信息。下面为设置示例。 # echo 1 /proc/sys/vm/oom_dump_tasks列表信息显示如下可以使用dmesg或syslog来确认。 [ pid ] uid tgid total_vm rss cpu oom_adj name [ 1] 0 1 2580 1 0 0 init [ 500] 0 500 3231 0 1 -17 udevd [ 2736] 0 2736 1470 1 0 0 syslogd [ 2741] 0 2741 944 0 0 0 klogd [ 2765] 81 2765 5307 0 0 0 dbus-daemon [ 2861] 0 2861 944 0 0 0 acpid ... [ 3320] 0 3320 525842 241215 1 0 stress /proc/PID/oom_score_adj 从Linux 2.6.36开始都安装了/proc//oom_score_adj此后将替换为/proc/ /oom_adj。详细内容请参考Documentation/feature-removal-schedules.txt。即使当前是对/proc//oom_adj进行的设置在内核内部进行变换后的值也是针对/proc//oom_score_adj设置的。/proc//oom_score_adj可以设置–1000~1000之间的值。设置为–1000时该进程就被排除在OOM Killer强制终止的对象外。在内核2.6.36以后的版本中写入oom_adj只会输出一次如下的信息。 # dmesg ..... udevd (60): /proc/60/oom_adj is deprecated, please use /proc/60/oom_score_adj instead. .....RHEL5的特征在RHEL5中运行OOM Killer时要比在上游内核中更加慎重。OOM Killer会计算调用的次数仅在一定时间段内超出调用一定次数的情况下运行。1.OOM Killer从上次调出到下一次调出之间超过5秒时调用次数重新开始计算。这是为了避免仅因为产生突发性的内存负载就终止进程。2.在计数变成0后的1秒以内调出时不计入调用的次数。3.OOM Killer的调用次数不足10次时实际不会运行。OOM Killer调用10次时才开始认为内存不足。4.最后OOM Killer运行不到5秒的话OOM Killer不会再次运行。因此运行频率最高也有5秒一次。这是为了防止不必要地连续终止多个进程。也有等待接收到OOM Killer发出信号的进程终止释放内存的意思。 OOM Killer一旦运行调用的次数就重新回到0。也就是说只有在OOM Killer在5秒以内调出的状态连续出现10次以上时才会运行。这些限制原本是到Linux 2.6.10为止都有的。因此在基于Linux 2.6.9的RHEL4中也需要实施这些限制。当前的上游内核中已经取消了这些限制。RHEL4的运行查看OOM Killer在RHEL4Linux 2.6.9中的运行情况。在下例中是内存、交换区都为2GB的环境下使用负载测试工具stress刻意消耗内存。stress是给内存、CPU、磁盘I/O施加负载的工具。既可以为其中一项增加负载也可以同时为这三项中的几项增加负载。stress在运行中如果接收到信号就会输出信息并终止。 # wget -t0 -c http://weather.ou.edu/~apw/projects/stress/stress-1.0.0.tar.gz # tar zxvf stress-1.0.0.tar.gz # cd stress-1.0.0 # ./configure ; make ; make install # stress --vm 2 --vm-bytes 2G --vm-keep /* 两个进程分别消耗2GB内存*/ stress: info: [17327] dispatching hogs: 0 cpu, 0 io, 2 vm, 0 hdd stress: FAIL: [17327](416) -- worker 17328 got signal 15 /* 接收SIGTERM信号*/ stress: WARN: [17327](418) now reaping child worker processes stress: FAIL: [17327](452) failed run completed in 70s 此时的控制台画面显示如下。 oom-killer: gfp_mask0xd0 Mem-info: ... Swap cache: add 524452, delete 524200, find 60/102, race 00 Free swap: 0kB /* 交换区剩余为0 */ 524224 pages of RAM /* 1页4KB因此内存大小为2GB */ 10227 reserved pages /* 在内核内部预约的内存 */ 19212 pages shared 253 pages swap cached Out of Memory: Killed process 17328 (stress). /* 根据信号终止的进程 */ 在上游内核中无法禁用OOM Killer而在RHEL4中则通过/proc/sys/vm/oom-kill可以禁用OOM Killer。 # echo 0 /proc/sys/vm/oom-kill或者 # /sbin/sysctl -w vm.oom-kill0禁用后OOM Killer就不会发送信号但是会输出如上内存信息。RHEL5的运行在RHEL5Linux 2.6.18中对OOM Killer的运行进行确认的方法与RHEL4中相同。 # stress --vm 2 --vm-bytes 2G --vm-keep stress: info: [11779] dispatching hogs: 0 cpu, 0 io, 2 vm, 0 hdd stress: FAIL: [11779](416) -- worker 11780 got signal 9 /* SIGKILL */ stress: WARN: [11779](418) now reaping child worker processes stress: FAIL: [11779](452) failed run completed in 46s 此时的控制台画面如下所示。添加了运行OOM Killer时的回溯输出便于调试。Call Trace: [ffffffff800bf551] out_of_memory0x8e/0x321[ffffffff8000f08c] __alloc_pages0x22b/0x2b4 ...[ffffffff800087fd] __handle_mm_fault0x208/0xe04[ffffffff80065a6a] do_page_fault0x4b8/0x81d[ffffffff800894ad] default_wake_function0x0/0xe[ffffffff80039dda] tty_ldisc_deref0x68/0x7b[ffffffff8005cde9] error_exit0x0/0x84Mem-info: ... Swap cache: add 512503, delete 512504, find 90/129, race 00 Free swap 0kB Total swap 2048276kB Free swap: 0kB 524224 pages of RAM 42102 reserved pages 78 pages shared 0 pages swap cached Out of memory: Killed process 11780 (stress).RHEL6的运行RHEL6.0中OOM Killer计算得分的方式基本和RHEL5中没有不同。RHEL6系不会如“RHEL5的特征”中所述慎重地运行。其运行基本与上游内核相同。小结本节介绍了OOM Killer的结构和各种设置。当系统运行异常时确认syslog等如果有OOM Killer的输出就可以得知曾出现内存不足。参考文献stresshttp://weather.ou.edu/~apw/projects/stress/—Naohiro Ooiwa 转载于:https://www.cnblogs.com/tcicy/p/8552721.html
http://www.huolong8.cn/news/47190/

相关文章:

  • 莆田有哪几家做网站设计的晋江网站建设联系电话
  • 终身免费网站建设加强企业网站建设的通知
  • 镇平做网站wordpress+高性能
  • 广州网站建设大公司排名查看邮箱注册的网站
  • 福永响应式网站建设软件开发的步骤
  • 网站开发期末作品代码和数据库运行好大全阿里做外贸是哪个网站
  • 好看动漫网替代网站tk网站免费
  • seo优化网站推广专员招聘如何开网站赚钱
  • 网站标题栏怎么修改模板网会员
  • 崇信县门户网站wordpress 顶部栏
  • 网站开始怎么做的版式设计
  • 集团企业网站建设方案策划书自己制作app需要什么
  • 咋么做网站线上购买链接
  • 外接硬盘做创建立网站吴忠市住房和城乡建设厅网站
  • wordpress站点信息修改版权网站应用系统设计方案
  • 国内专门做情侣的网站商城福州电商网站设计
  • 盐山网站wordpress 主题框架
  • 济宁做网站的电话wordpress描述怎么改
  • 嘉兴建设公司网站仿站定制模板建站
  • 游戏网站设计模板可编辑wordpress主题
  • 网站备案怎么改广告推广平台赚取佣金
  • 做医采官方网站网站建设mus18
  • 企业网站规划案例企业自己怎么做网站推广
  • 南宁网站制作工具如何管理wordpress网站模板下载
  • 做自己的网站怎么赚钱经营地址怎么在国税网站做更改
  • 免费查企业app排行榜网络优化排名培训
  • 分析对手网站的优化方法赣icp网站建设
  • 国外网站开发技术现状阿里巴巴与慧聪网网站建设对比
  • 网站建设可以自学吗网络规划设计师教程最新版
  • 做线下活动的网站做网站的知名公司