mongodb的NUMA问题

mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest launching mongod like this to avoid performance problems: numactl –interleave=all mongod [other options] 解决方案: 1.在原启动命令前面加numactl –interleave=all 如# numactl –interleave=all ${MONGODB_HOME}/bin/mongod –config conf/mongodb.conf 2.修改内核参数 echo 0 > /proc/sys/vm/zone_reclaim_mode http://www.mongodb.org/display/DOCS/NUMA 下面注释转自网络 一、NUMA和SMP NUMA和SMP是两种CPU相关的硬件架构。在SMP架构里面,所有的CPU争用一个总线来访问所有内存,优点是资源共享,而缺点是总线争用激烈。随着PC服务器上的CPU数量变多(不仅仅是CPU核数),总线争用的弊端慢慢越来越明显,于是Intel在Nehalem CPU上推出了NUMA架构,而AMD也推出了基于相同架构的Opteron CPU。 NUMA最大的特点是引入了node和distance的概念。对于CPU和内存这两种最宝贵的硬件资源,NUMA用近乎严格的方式划分了所属的资源组(node),而每个资源组内的CPU和内存是几乎相等。资源组的数量取决于物理CPU的个数(现有的PC server大多数有两个物理CPU,每个CPU有4个核);distance这个概念是用来定义各个node之间调用资源的开销,为资源调度优化算法提供数据支持。 二、NUMA相关的策略 1、每个进程(或线程)都会从父进程继承NUMA策略,并分配有一个优先node。如果NUMA策略允许的话,进程可以调用其他node上的资源。 2、NUMA的CPU分配策略有cpunodebind、physcpubind。cpunodebind规定进程运行在某几个node之上,而physcpubind可以更加精细地规定运行在哪些核上。 3、NUMA的内存分配策略有localalloc、preferred、membind、interleave。localalloc规定进程从当前node上请求分配内存;而preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node。membind可以指定若干个node,进程只能从这些指定的node上请求分配内存。interleave规定进程从指定的若干个node上以RR算法交织地请求分配内存。 三、NUMA和swap的关系 可能大家已经发现了,NUMA的内存分配策略对于进程(或线程)之间来说,并不是公平的。在现有的Redhat Linux中,localalloc是默认的NUMA内存分配策略,这个配置选项导致资源独占程序很容易将某个node的内存用尽。而当某个node的内存耗尽时,Linux又刚好将这个node分配给了某个需要消耗大量内存的进程(或线程),swap就妥妥地产生了。尽管此时还有很多page cache可以释放,甚至还有很多的free内存。 四、解决swap问题 […]

误删 libc.so.6的解决方法

今天不小心把libc.so.6给删除了。 原系统是这样的: libc.so.6 -> lib-2.6.1.so 本想新建立一个软链接,指向 lib-2.8.so 没想到 ln 命令不能用了。 原来linux 很多shell命令都离不开 libc.so.6。 真惨了。 幸好没有关linux. 从网上一查, 找到解决方案: 进入 /lib (或 /lib64 视情况而定), #LD_PRELOAD=/lib/libc-x.x.x.so && ln -s /lib/libc-x.x.x.so libc.so.6 x.x.x表示系统libc的版本 就可以了 一定要记住自己系统使用的libc版本。

How-To: Install Google’s Android Eclipse Plugin (And/or Adb) on 64-bit Debian/Ubuntu

Today I had to reinstall the Android plugin on my system and I recently upgraded to a 64-bit development VM. To my surprise the installation didn’t go smoothly at all. After restarting Eclipse twice I was constantly presented with two error messages “Failed to parse the output of ‘adb version’” and “adb: error while loading […]

use ssh to run shell script on a remote machine

Also, don’t forget to escape variables if you want to pick them up from the destination host. This has caught me out in the past. For example: user@host> ssh user2@host2 “echo \$HOME” prints out /home/user2 while user@host> ssh user2@host2 “echo $HOME” prints out /home/user Another example: user@host> ssh user2@host2 “echo hello world | awk ‘{print […]

Node.js V0.12新特性之给子进程的同步API

尽管发明Node.js的初衷主要是为了编写Web服务器,但开发人员又发现了其他适用(和不适用!)Node的用途。令人觉得惊喜的是,这些用途中有一个是编写shell脚本。并且那确实有意义:Node的跨平台支持已经相当好了,既然前端和后端都用JavaScript写了,如果构建系统也用JavaScript写不是更好吗,对吧? 异步对shell脚本的坏处 在这一用途上值得称道的库是Grunt,它是构建在ShellJS之上的。然而ShellJS有一块硬骨头要啃:Node迫使它用异步I/O。尽管对于Web服务器来说异步I/O很棒,因为它必须随时做出响应,但对于需要逐步执行的shell脚本来说,异步I/O意义不大。 所以,ShellJS的作者们发现了一个“有趣的”解决办法,让它可以运行一个shell命令,然后等着命令完成。大致上是下面这样的代码: var child_process = require(‘child_process’); var fs = require(‘fs’); function execSync(command) { // 在子shell中运行命令 child_process.exec(command + ‘ 2>&1 1>output && echo done! > done’); // 阻塞事件循环,知道命令执行完 while (!fs.existsSync(‘done’)) { // 什么都不做 } // 读取输出 var output = fs.readFileSync(‘output’); // 删除临时文件。 fs.unlinkSync(‘output’); fs.unlinkSync(‘done’); return output; } 换句话说,在shell执行你的命令时,ShellJS依然在运行,并持续不断地轮询着文件系统,检查是否能找到表明命令已经完成的那个文件。有点儿像驴子。 这种效率低下又丑陋不堪的解决办法让Node核心团队受刺激了,实现了一个真正的解决方案 – Node v0.12最终应该会支持同步运行子进程。实际上这个特性已经在路线图上放了很长时间了– 我记得是在2011年的JSConf.eu上(!) ,跟现在已经退休的Node维护者Felix […]

Some useful ffmpeg commands ( commandline video converting tool)

1. Converting MOV/MPEG/AVI/MP4 –> flv  #ffmpeg -i input file output.flv 2. Convert and adjust the video file resolution to output file # ffmpeg -i input.avi -s 500×500 output.flv 3. Converting 3GP –> FLV #ffmpeg -i input.3gp -sameq -an output.flv 4. Converting MPEG –>3GP #ffmpeg -i input.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif […]

SIEGE

Siege is an http load testing and benchmarking utility. It was designed to let web developers measure their code under duress, to see how it will stand up to load on the internet. Siege supports basic authentication, cookies, HTTP and HTTPS protocols. It lets its user hit a web server with a configurable number of […]

Node.js 究竟是什么?

Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。   清单 2. Node 随机数字生成器 // these modules need to be imported in order to use them. // Node has several modules. They are like any #include // or import statement in other languages var http = require(“http”); var url = require(“url”); // The most important line in any Node file. […]

shell 上传目录

#!/bin/bash updir=/root/wav todir=/ sss=`find $updir -type d -printf $todir/’%P\n’| awk ‘{if ($0 == “”)next;print “mkdir ” $0}’` aaa=`find $updir -type f -printf ‘put %p %P \n’` ftp -nv spetechcular.com <<EOF user quantong quantong2013 type binary prompt $sss cd $todir $aaa quit EOF

awk用法总结

awk 用法小结 – – – by ruson 2006.4 NTU 1. awk 非常适合于结构化的文本文件(行、列数据)复杂处理。相对于 sed 而言,它可进 行复杂的编程处理,并且可以产生复杂的报表输出。 2. awk 通常有三个版本,旧 awk、nawk(新) 、gawk。Solaris 下建议用 nawk,因为旧 awk 有很多功能不支持,例如数学运算幂 ^  ,函数getline,system等。 3. 基本语法:awk ‘pattern{action}’ filename   其中 action 内容可扩充,也可以有多个 action。 执行顺序:awk 一行行读入输入文件,顺序执行‘’内内容,按模式匹配来采取动作。 其他调用:awk 可用内部变量和函数,条件与循环语句,也可执行数学运算和字符串操 作。 此外, 可以使用 BEGIN和 END来执行处理前预操作和处理后后继操作。 A.  常用内部变量:NR(当前行数)NF(字段总数)$0(当前整行)$1(第一个记录) FS(字段分隔符)OFS(输出字段分隔符)ORS(输出记录分隔符) B.模式  pattern可以是/ /包含的匹配形式,也是条件语句如$3<10 C.BEGIN(处理文件前的 action,常包含 FS、OFS 等) 、END(处理文件后的 action) […]