apache ftp ...
1. 查看mq阻塞情况
while :; do echo -ne "stats queue\r\nquit\r\n"|nc localhost 22202 | grep queue_name | awk '{print $3;}'| awk -F"/" '{print $1-$2;}'; sleep 3;done
2. 查看mq写入情况
while :; do echo -ne "stats queue\r\nquit\r\n"|nc localhost 22202 | grep queue_name | awk '{print $3;}'| awk -F"/" '{print $1;}'; sleep 3;done| awk '{print $1-old;old=$1;}'
3. 查看mq消费情况
while :; do echo -ne "stats queue\r\nquit\r\n"|nc localhost 22202 | grep queue_name | awk '{print $3;}'| awk -F"/" '{print $1;}'; sleep 3;done| awk '{print $1-old;old=$1;}'
while :; do echo -ne "stats queue\r\nquit\r\n"|nc localhost 22202 | grep queue_name | awk '{print $3;}'| awk -F"/" '{print $1-$2;}'; sleep 3;done
2. 查看mq写入情况
while :; do echo -ne "stats queue\r\nquit\r\n"|nc localhost 22202 | grep queue_name | awk '{print $3;}'| awk -F"/" '{print $1;}'; sleep 3;done| awk '{print $1-old;old=$1;}'
3. 查看mq消费情况
while :; do echo -ne "stats queue\r\nquit\r\n"|nc localhost 22202 | grep queue_name | awk '{print $3;}'| awk -F"/" '{print $1;}'; sleep 3;done| awk '{print $1-old;old=$1;}'
关于mongodb的db.stats() 的解释:

其中:
collections: 集合的个数
objects: 对象的个数, 循环每个集合得到的,每个集合的记录数(nrecords)之和
avgObjSize: 平均每个对象的大小, 通过 dataSize / objects 得到
dataSize: 每个集合的dataSize之和
storageSize: 每个集合的storageSize之和
fileSize: db下面的物理存储文件的大小; 物理存储文件比实际的数据要大一些,这是是mongo的预分配机制
这里最难理解的大概就是 storageSize了,它和dataSize的差异参看: http://blog.nosqlfan.com/html/2654.html
相关代码db\dbcommands.cpp:
其中:
collections: 集合的个数
objects: 对象的个数, 循环每个集合得到的,每个集合的记录数(nrecords)之和
avgObjSize: 平均每个对象的大小, 通过 dataSize / objects 得到
dataSize: 每个集合的dataSize之和
storageSize: 每个集合的storageSize之和
fileSize: db下面的物理存储文件的大小; 物理存储文件比实际的数据要大一些,这是是mongo的预分配机制
这里最难理解的大概就是 storageSize了,它和dataSize的差异参看: http://blog.nosqlfan.com/html/2654.html
相关代码db\dbcommands.cpp:
- bool run(const string& dbname, BSONObj& jsobj, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
- list<string> collections;
- Database* d = cc().database();
- if ( d )
- d->namespaceIndex.getNamespaces( collections );
- long long ncollections = 0;
- long long objects = 0;
- long long size = 0;
- long long storageSize = 0;
- long long numExtents = 0;
- long long indexes = 0;
- long long indexSize = 0;
- for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) {
- const string ns = *it;
- NamespaceDetails * nsd = nsdetails( ns.c_str() );
- if ( ! nsd ) {
- errmsg = "missing ns: ";
- errmsg += ns;
- return false;
- }
- ncollections += 1;
- objects += nsd->stats.nrecords;
- size += nsd->stats.datasize;
- int temp;
- storageSize += nsd->storageSize( &temp );
- numExtents += temp;
- indexes += nsd->nIndexes;
- indexSize += getIndexSizeForCollection(dbname, ns);
- }
- result.append ( "db" , dbname );
- result.appendNumber( "collections" , ncollections );
- result.appendNumber( "objects" , objects );
- result.append ( "avgObjSize" , objects == 0 ? 0 : double(size) / double(objects) );
- result.appendNumber( "dataSize" , size );
- result.appendNumber( "storageSize" , storageSize);
- result.appendNumber( "numExtents" , numExtents );
- result.appendNumber( "indexes" , indexes );
- result.appendNumber( "indexSize" , indexSize );
- result.appendNumber( "fileSize" , d->fileSize() );
- return true;
- }
- dDBStats;
- long long Database::fileSize() const {
- long long size=0;
- for (int n=0; exists(n); n++)
- size += boost::filesystem::file_size( fileName(n) );
- return size;
- }
- boost::filesystem::path Database::fileName( int n ) const {
- stringstream ss;
- ss << name << '.' << n;
- boost::filesystem::path fullName;
- fullName = boost::filesystem::path(path);
- if ( directoryperdb )
- fullName /= name;
- fullName /= ss.str();
- return fullName;
- }
1. 关于mongodb的遍历
db.phpor.test.find();
it
如:

2. mongodb可以在server端保存js,这样一些业务逻辑就可以使用js来写了,而且算法也不需要总是通过网络传递
db.phpor.test.find();
it
如:
2. mongodb可以在server端保存js,这样一些业务逻辑就可以使用js来写了,而且算法也不需要总是通过网络传递
下面的8001端口进程使用的是默认的malloc内存分配器, 8002端口是使用了tcmalloc内存分配器,线上数据运行了1个月的时间,发现tcmalloc使用的内存更多一些。
1. 同样在一组磁盘上的两个TT端口,其读写操作是根据均匀的hash方式来分配的,但是,其中一个3001端口同步数据就很慢,而3002端口同步数据就很快,重启3001端口依然很慢; 把3002端口停掉之后,3001端口依然很慢。
2. 通过tcpdump抓包发现:
3001端口的master 2001端口,数据流表现为:
2001 --------很多数据给-----》 3001
3001 --------因为吃不消,所以act 一个win(0) 给 ----》 2001
2001 --------不断询问 ----------》3001
2001 --------不断询问 ----------》3001
2001 --------不断询问 ----------》3001
3001 --------响应,说在给点儿吧 -------》 2001
2001 --------很多数据给 ---------.....
使用netstat也可以发现,对于3001的同步连接中的接受队列总是会阻塞很多数据,看来是执行的太慢
3. 观察 3001端口的执行情况,下面是使用strace跟踪的这个繁忙的ttserver进程的系统调用情况:
为什么futex耗费的时间如此惊人?




2012/03/20 17:43 | 
