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;}'
关于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:
  1. bool run(const string& dbname, BSONObj& jsobj, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
  2.     list<string> collections;
  3.     Database* d = cc().database();
  4.     if ( d )
  5.         d->namespaceIndex.getNamespaces( collections );
  6.     long long ncollections = 0;
  7.     long long objects = 0;
  8.     long long size = 0;
  9.     long long storageSize = 0;
  10.     long long numExtents = 0;
  11.     long long indexes = 0;
  12.     long long indexSize = 0;
  13.     for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) {
  14.         const string ns = *it;
  15.         NamespaceDetails * nsd = nsdetails( ns.c_str() );
  16.         if ( ! nsd ) {
  17.             errmsg = "missing ns: ";
  18.             errmsg += ns;
  19.             return false;
  20.         }
  21.         ncollections += 1;
  22.         objects += nsd->stats.nrecords;
  23.         size += nsd->stats.datasize;
  24.         int temp;
  25.         storageSize += nsd->storageSize( &temp );
  26.         numExtents += temp;
  27.         indexes += nsd->nIndexes;
  28.         indexSize += getIndexSizeForCollection(dbname, ns);
  29.     }
  30.     
  31.     result.append      ( "db" , dbname );
  32.     result.appendNumber( "collections" , ncollections );
  33.     result.appendNumber( "objects" , objects );
  34.     result.append      ( "avgObjSize" , objects == 0 ? 0 : double(size) / double(objects) );
  35.     result.appendNumber( "dataSize" , size );
  36.     result.appendNumber( "storageSize" , storageSize);
  37.     result.appendNumber( "numExtents" , numExtents );
  38.     result.appendNumber( "indexes" , indexes );
  39.     result.appendNumber( "indexSize" , indexSize );
  40.     result.appendNumber( "fileSize" , d->fileSize() );
  41.     return true;
  42. }
  43. dDBStats;

  1. long long Database::fileSize() const {
  2.     long long size=0;
  3.     for (int n=0; exists(n); n++)
  4.         size += boost::filesystem::file_size( fileName(n) );
  5.     return size;
  6. }
  1. boost::filesystem::path Database::fileName( int n ) const {
  2.     stringstream ss;
  3.     ss << name << '.' << n;
  4.     boost::filesystem::path fullName;
  5.     fullName = boost::filesystem::path(path);
  6.     if ( directoryperdb )
  7.         fullName /= name;
  8.     fullName /= ss.str();
  9.     return fullName;
  10. }
1. 关于mongodb的遍历
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耗费的时间如此惊人?
分页: 1/19 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]