2011年八月

debian系统sshd连接慢的解决办法

最近客户端连debian下sshd很慢,每次都需要等待半分钟左右,今天终于无法忍受了,上网找了下资料,把这个问题解决了

原因:

主要是debian在默认情况下开启了dns的反向解析,这个比较耗时

解决方法:

1. 编辑/etc/nsswitch.conf 找到hosts行,替换为

hosts: files dns [NOTFOUND=return]

2. 查看/etc/resolv.conf文件,查看dns地址是否设置正确,如果没有用,直接注掉即可

3. 重启sshd : 先kill掉,然后/usr/sbin/sshd 启功即可



linux下多线程编程的几篇不错的博文

1. 多线程服务器的常用编程模型

2. 多线程服务器的适用场合

3. 并发编程的 15 条建议(译)

4. C++ 多线程系统编程精要

选自陈硕的blog : http://blog.csdn.net/solstice



查看 CPU, Memory, I/O and NetFlow[转载]

原文地址:http://blogread.cn/it/article.php?id=3908&f=sa

iostat 查看磁盘 I/O

[root@localhost ~]# iostat -d -x 2
                             extended device statistics
device mgr/s mgw/s    r/s    w/s    kr/s    kw/s   size queue   wait svc_t  %b
hda        0     0    0.0    0.9     0.1     5.4    6.3   0.0    4.7   0.9   0
                             extended device statistics
device mgr/s mgw/s    r/s    w/s    kr/s    kw/s   size queue   wait svc_t  %b
hda        0     3    0.0    2.0     0.0    20.0   10.0   0.0    0.8   0.5   0
 ......

命令释意: 查看磁盘 I/0 情况,且每两秒刷新一次

[root@localhost ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    284  68700 165876 416748    0    0     0     5    1    1  0  0 100  0  0
 ......

命令释意: 查看CPU使用情况的命令, 每 5 秒刷新一次,最右侧列为 CPU 的占用率的数据

top 查看进程占有率

[root@localhost ~]# top

然后在 top 的命令内部命令栏输入shift+p or P

top - 13:38:52 up 102 days,  4:17,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  81 total,   2 running,  79 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1035292k total,   966592k used,    68700k free,   165876k buffers
Swap:  2096472k total,      284k used,  2096188k free,   416760k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4875 root      15   0  2192 1000  800 R  0.3  0.1   0:00.15 top
    1 root      15   0  2060  620  532 S  0.0  0.1   0:01.65 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
.......

命令释意: 查看进程处理器占用率情况,并对其进行排序

free 查看内存使用情况

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:       1035292     966592      68700          0     165876     416768
-/+ buffers/cache:     383948     651344
Swap:      2096472        284    2096188

命令释意: 查看内存使用情况

top 查看进程内存使用

[root@localhost ~]# top

然后在 top 的命令内部命令栏输入shift+m or M

top - 13:48:52 up 102 days,  4:27,  1 user,  load average: 0.00, 0.01, 0.00
Tasks:  81 total,   2 running,  79 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1035292k total,   966592k used,    68700k free,   165876k buffers
Swap:  2096472k total,      284k used,  2096188k free,   416784k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4128 root      34  19  280m 266m 2112 S  0.0 26.4   1:48.40 yum-updatesd
 8314 www       18   0  171m  34m  34m S  0.0  3.4   0:06.03 memcacheq
 8280 www       15   0 88084  34m  588 S  0.0  3.4   0:01.23 memcached
10907 mysql     15   0  122m  16m 3892 S  0.0  1.7   0:25.29 mysqld
......

命令释意: 查看进程内存占用率情况,并对其进行排序
更多 >



[编程之美]随机数范围扩展方法总结

问题描述

已知random3()这个随机数产生器生成[1, 3]范围的随机数,请用random3()构造random5()函数,生成[1, 5]的随机数?

问题分析

如何从[1-3]范围的数构造更大范围的数呢?同时满足这个更大范围的数出现概率是相同的,可以想到的运算包括两种:加法和乘法

考虑下面的表达式:

3 * (random3() – 1) + random3();

可以计算得到上述表达式的范围是[1, 9]  而且数的出现概率是相同的,即1/9

下面考虑如何从[1, 9]范围的数生成[1, 5]的数呢?

可以想到的方法就是 rejection sampling 方法,即生成[1, 9]的随机数,如果数的范围不在[1, 5]内,则重新取样

解决方法

int random5()
{
    int val = 0;
    do {
        val = 3 * (random3() - 1) + random3();
    } while (val > 5);
    return val;
}

归纳总结

将这个问题进一步抽象,已知random_m()随机数生成器的范围是[1, m] 求random_n()生成[1, n]范围的函数,m < n && n <= m *m
一般解法:

int random_n()
{
    int val = 0 ;
    int t; // t为n最大倍数,且满足 t &lt;= m * m     
    do {         
        val = m * (random_m() - 1) + random_m();     
    } while (val > t);
    return val;
}

参考资料:

http://stackoverflow.com/questions/137783/expand-a-random-range-from-1-5-to-1-7