【需求】
不影响服务器处理的前提下,检测客户端程序是否被强制终了。
【现状】
服务器端和客户端的Socket都设定了keepalive属性。
服务器端设定了探测次数等参数,客户端、服务器只是打开了keepalive机能
服务器端起了一个监视线程,利用select来检测socket是否被关闭。。。

下面这是我的一点肤浅理解。

1.关于keep alive

无论windows,还是linux,keepalive就三个参数:

    sk->keepalive_probes:探测次数
    sk->keepalive_time   探测的超时
    sk->keepalive_intvl 探测间隔

对 于一个已经建立的tcp连接。如果在keepalive_time时间内双方没有任何的数据包传输,则开启keepalive功能的一端将发送 eepalive数据包,若没有收到应答,则每隔keepalive_intvl时间再发送该数据包,发送keepalive_probes次。一直没有 收到应答,则发送rst包关闭连接。若收到应答,则将计时器清零。例如★:

    sk->keepalive_probes = 3;
    sk->keepalive_time   = 30;
    sk->keepalive_intvl = 1;

意 思就是说对于tcp连接,如果一直在socket上有数据来往就不会触发keepalive,但是如果30秒一直没有数据往来,则keep alive开始工作:发送探测包,受到响应则认为网络,是好的,结束探测;如果没有相应就每隔1秒发探测包,一共发送3次,3次后仍没有相应,
就 关闭连接,也就是从网络开始断到你的socket能够意识到网络异常,最多花33秒。但是如果没有设置keep alive,可能你在你的socket(阻塞性)的上面,接收: recv会一直阻塞不能返回,除非对端主动关闭连接,因为recv不知道socket断了。发送:取决于数据量的大小,只要底层协议站的buffer能放 下你的发送数据,应用程序级别的send就会一直成功返回。 直到buffer满,甚至buffer满了还要阻塞一段时间试图等待buffer空闲。所以你对send的返回值的检查根本检测不到失败。开启了keep alive功能,你直接通过发送接收的函数返回值就可以知道网络是否异常。设置的方法(应用层):

    int keepalive = 1; // 开启keepalive属性
    int keepidle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
    int keepinterval = 5; // 探测时发包的时间间隔为5 秒
    int keepcount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
    setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive ));
    setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle ));
    setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval ));
    setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount ));

2.select和keep alive的关系

select 是为单个线程使用多个socket而设计的,跟检测连接无关,如果只是检测一个socket的话,没有必要使用select。开了keepalive机能 的话,每次调用recv或send时检查返回值,判断是否出错或为0.如果出错,再检查errno查资料,看哪个或哪几个错误号表示链接断了或不存在就可 以了。

另外,谁想定期检查连接状况,谁就启用keep alive。另一端可以不起,只是被动地对探测包进行响应,这种响应是tcp协议的基本要求,跟keep alive无关。并不需要客户端和服务器端都开启keep alive。

3.测试结果

按照例★的值在一端的socket上开启keep alive,然后阻塞在一个recv或者不停的send,这个时候拔了网线,测试从拔掉网线到recv/send返回失败的时间。

在linux kernel里头的测试发现,对于阻塞型的socket,当recv的时候,如果没有设置keep alive,即使网线拔掉或者ifdown,recv很长时间不会返回,最长达17分钟,虽然这个时间比linux的默认超时时间()短了很多。但是如果 设置了keep alive,基本都在keepalive_time +keepalive_probes*keepalive_intvl =33秒内返回错误。

但是对于循环不停send的socket,当拔掉网线后,会持续一段时间send返 回成功(0~10秒左右,取决 于发送数据的量),然后send阻塞,因为协议层的buffer满了,在等待buffer空闲,大概90秒左右后才会返回错误。由此看来,send的时 候,keep alive似乎没有起到作用,这个原因至今也不清楚。后来通过给send之前设置timer来解决的。


来自:http://blog.csdn.net/guomsh/article/details/8484207

linux下使用TCP存活(keepalive)定时器
一、什么是keepalive定时器?[1]
在一个空闲的(idle)TCP连接上,没有任何的数据流,许多TCP/IP的初学者都对此感到惊奇。也就是说,如果TCP连接两端没有任何一个进程在向对方发送数据,那么在这两个TCP模块之间没有任何的数据交换。你可能在其它的网络协议中发现有轮询(polling),但在TCP中它不存在。言外之意就是我们只要启动一个客户端进程,同服务器建立了TCP连接,不管你离开几小时,几天,几星期或是几个月,连接依旧存在。中间的路由器可能崩溃或者重启,电话线可能go down或者back up,只要连接两端的主机没有重启,连接依旧保持建立。
这就可以认为不管是客户端的还是服务器端的应用程序都没有应用程序级(application-level)的定时器来探测连接的不活动状态(inactivity),从而引起任何一个应用程序的终止。然而有的时候,服务器需要知道客户端主机是否已崩溃并且关闭,或者崩溃但重启。许多实现提供了存活定时器来完成这个任务。
存活定时器是一个包含争议的特征。许多人认为,即使需要这个特征,这种对对方的轮询也应该由应用程序来完成,而不是由TCP中实现。此外,如果两个终端系统之间的某个中间网络上有连接的暂时中断,那么存活选项(option)就能够引起两个进程间一个良好连接的终止。例如,如果正好在某个中间路由器崩溃、重启的时候发送存活探测,TCP就将会认为客户端主机已经崩溃,但事实并非如此。
存活(keepalive)并不是TCP规范的一部分。在Host Requirements RFC罗列有不使用它的三个理由:(1)在短暂的故障期间,它们可能引起一个良好连接(good connection)被释放(dropped),(2)它们消费了不必要的宽带,(3)在以数据包计费的互联网上它们(额外)花费金钱。然而,在许多的实现中提供了存活定时器。
一些服务器应用程序可能代表客户端占用资源,它们需要知道客户端主机是否崩溃。存活定时器可以为这些应用程序提供探测服务。Telnet服务器和Rlogin服务器的许多版本都默认提供存活选项。
个人计算机用户使用TCP/IP协议通过Telnet登录一台主机,这是能够说明需要使用存活定时器的一个常用例子。如果某个用户在使用结束时只是关掉了电源,而没有注销(log off),那么他就留下了一个半打开(half-open)的连接。在图18.16,我们看到如何在一个半打开连接上通过发送数据,得到一个复位(reset)返回,但那是在客户端,是由客户端发送的数据。如果客户端消失,留给了服务器端半打开的连接,并且服务器又在等待客户端的数据,那么等待将永远持续下去。存活特征的目的就是在服务器端检测这种半打开连接。

二、keepalive如何工作?[1]
在此描述中,我们称使用存活选项的那一段为服务器,另一端为客户端。也可以在客户端设置该选项,且没有不允许这样做的理由,但通常设置在服务器。如果连接两端都需要探测对方是否消失,那么就可以在两端同时设置(比如NFS)。
若在一个给定连接上,两小时之内无任何活动,服务器便向客户端发送一个探测段。(我们将在下面的例子中看到探测段的样子。)客户端主机必须是下列四种状态之一:
1) 客户端主机依旧活跃(up)运行,并且从服务器可到达。从客户端TCP的正常响应,服务器知道对方仍然活跃。服务器的TCP为接下来的两小时复位存活定时器,如果在这两个小时到期之前,连接上发生应用程序的通信,则定时器重新为往下的两小时复位,并且接着交换数据。
2) 客户端已经崩溃,或者已经关闭(down),或者正在重启过程中。在这两种情况下,它的TCP都不会响应。服务器没有收到对其发出探测的响应,并且在75秒之后超时。服务器将总共发送10个这样的探测,每个探测75秒。如果没有收到一个响应,它就认为客户端主机已经关闭并终止连接。
3) 客户端曾经崩溃,但已经重启。这种情况下,服务器将会收到对其存活探测的响应,但该响应是一个复位,从而引起服务器对连接的终止。
4) 客户端主机活跃运行,但从服务器不可到达。这与状态2类似,因为TCP无法区别它们两个。它所能表明的仅是未收到对其探测的回复。
服务器不必担心客户端主机被关闭然后重启的情况(这里指的是操作员执行的正常关闭,而不是主机的崩溃)。当系统被操作员关闭时,所有的应用程序进程(也就是客户端进程)都将被终止,客户端TCP会在连接上发送一个FIN。收到这个FIN后,服务器TCP向服务器进程报告一个文件结束,以允许服务器检测这种状态。
在第一种状态下,服务器应用程序不知道存活探测是否发生。凡事都是由TCP层处理的,存活探测对应用程序透明,直到后面2,3,4三种状态发生。在这三种状态下,通过服务器的TCP,返回给服务器应用程序错误信息。(通常服务器向网络发出一个读请求,等待客户端的数据。如果存活特征返回一个错误信息,则将该信息作为读操作的返回值返回给服务器。)在状态2,错误信息类似于“连接超时”。状态3则为“连接被对方复位”。第四种状态看起来像连接超时,或者根据是否收到与该连接相关的ICMP错误信息,而可能返回其它的错误信息。

三、在Linux中如何使用keepalive?[2]
Linux has built-in support for keepalive. You need to enable TCP/IP networking in order to use it. You also need procfs support andsysctl support to be able to configure the kernel parameters at runtime.
The procedures involving keepalive use three user-driven variables:

tcp_keepalive_time
    the interval between the last data packet sent (simple ACKs are not considered data) and the first keepalive probe; after the connection is marked to need keepalive, this counter is not used any further
tcp_keepalive_intvl
    the interval between subsequential keepalive probes, regardless of what the connection has exchanged in the meantime
tcp_keepalive_probes
    the number of unacknowledged probes to send before considering the connection dead and notifying the application layer

Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions.
上面一段话已经说得很明白,linux内核包含对keepalive的支持。其中使用了三个参数:tcp_keepalive_time(开启keepalive的闲置时长)tcp_keepalive_intvl(keepalive探测包的发送间隔) 和tcp_keepalive_probes (如果对方不予应答,探测包的发送次数);如何配置这三个参数呢?
There are two ways to configure keepalive parameters inside the kernel via userspace commands:

    procfs interface
    sysctl interface

We mainly discuss how this is accomplished on the procfs interface because it's the most used, recommended and the easiest to understand. The sysctl interface, particularly regarding the sysctl(2) syscall and not the sysctl(8) tool, is only here for the purpose of background knowledge.
The procfs interface
This interface requires both sysctl and procfs to be built into the kernel, and procfs mounted somewhere in the filesystem (usually on/proc, as in the examples below). You can read the values for the actual parameters by "catting" files in /proc/sys/net/ipv4/directory:

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200
  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75
  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

The first two parameters are expressed in seconds, and the last is the pure number. This means that the keepalive routines wait for two hours (7200 secs) before sending the first keepalive probe, and then resend it every 75 seconds. If no ACK response is received for nine consecutive times, the connection is marked as broken.
Modifying this value is straightforward: you need to write new values into the files. Suppose you decide to configure the host so that keepalive starts after ten minutes of channel inactivity, and then send probes in intervals of one minute. Because of the high instability of our network trunk and the low value of the interval, suppose you also want to increase the number of probes to 20.
Here's how we would change the settings:

  # echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
  # echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
  # echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes

To be sure that all succeeds, recheck the files and confirm these new values are showing in place of the old ones.
这样,上面的三个参数配置完毕。使这些参数重启时保持不变的方法请阅读参考文献[2]。

四、在程序中如何使用keepalive?[2]-[4]
All you need to enable keepalive for a specific socket is to set the specific socket option on the socket itself. The prototype of the function is as follows:

int setsockopt(int s, int level, int optname,
                 const void *optval, socklen_t optlen)

The first parameter is the socket, previously created with the socket(2); the second one must be SOL_SOCKET, and the third must beSO_KEEPALIVE . The fourth parameter must be a boolean integer value, indicating that we want to enable the option, while the last is the size of the value passed before.
According to the manpage, 0 is returned upon success, and -1 is returned on error (and errno is properly set).
There are also three other socket options you can set for keepalive when you write your application. They all use the SOL_TCP level instead of SOL_SOCKET, and they override system-wide variables only for the current socket. If you read without writing first, the current system-wide parameters will be returned.
TCP_KEEPCNT: overrides tcp_keepalive_probes
TCP_KEEPIDLE: overrides tcp_keepalive_time
TCP_KEEPINTVL: overrides tcp_keepalive_intvlint keepAlive = 1; // 开启keepalive属性
我们看到keepalive是一个开关选项,可以通过函数来使能。具体地说,可以使用以下代码:
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
上面英文资料中提到的第二个参数可以取为SOL_TCP,以设置keepalive的三个参数(具体代码参考文献[3]),在程序中实现需要头文件“netinet/tcp.h”。当然,在实际编程时也可以采用系统调用的方式配置的keepalive参数。
关于setsockopt的其他参数可以参考文献[4]。

五、如何判断TCP连接是否断开?[3]
当tcp检测到对端socket不再可用时(不能发出探测包,或探测包没有收到ACK的响应包),select会返回socket可读,并且在recv时返回-1,同时置上errno为ETIMEDOUT。

来自:http://machael.blog.51cto.com/829462/211989/
背景:
root@119.10.*.23:/dev/shm# df -hT    
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/sda3     ext4     14G  5.4G  7.3G  43% /
tmpfs        tmpfs    2.9G     0  2.9G   0% /dev/shm
/dev/sda1     ext4    504M   43M  436M   9% /boot
/dev/sdb      ext4     94G  284M   89G   1% /data

vi /etc/fstab
tmpfs                   /dev/shm                tmpfs   defaults        0 0
——————————————文章学习——————————————
修改/etc/fstab的这行: 默认的:
none /dev/shm tmpfs defaults 0 0
改成:
none /dev/shm tmpfs defaults,size=1024M 0 0
size参数也可以用G作单位:size=1G。
重新mount /dev/shm使之生效:
# mount -o remount /dev/shm
马上可以用"df -h"命令检查变化。

阅读全文
背景:我最近买了一vps 5G内存,发现其内存刚开始还我很多剩余,逐渐发现内存越来越少,最近备案就开lnmp套件也没开几个进程呀。

[root@ZWCLC6X-7198 ~]# uptime
11:20:48 up 6 days, 37 min,  1 user,  load average: 0.00, 0.00, 0.00

阅读全文
页面构建时有中文名:
你里面是不是有中文文件名,出现:svn: Can't convert string from native encoding to 'UTF-8':
svn: ?\229?\143?\130?\228?\184?\142?\230?\180?\187?\229?\138?\168?\231?\172?\172?\228?\184?\137?\230?\173?\165-?\229?\143?\130?\228?\184?\142?\230?\136?\144?\229?\138?\159.html  
实践OK如下:
于是在shell刚开始加入三行,如下:
#! #/bin/sh
export LC_CTYPE="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
[root@test ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=为空,我在上面给全设置了:-)

这样设置后,如下:
export LC_CTYPE="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"


好了:
跳过“set-depth=exclude”
跳过“data”
于修订版 1444。
跳过“set-depth=exclude”
跳过“data”
————————————————————————————————————————————————————————————————
svn 版本库中有文件是以中文字符命名的,在 Linux 下 checkout 会报错:
svn: Can't convert string from 'UTF-8' to native encoding
然后 checkout 程序就退出了!
解决办法很简单,正确设置当前系统的 locale:
export LC_CTYPE="zh_CN.UTF-8"
然后重新 checkout 即可。
注意,根据你的系统字符集设置变量,如果 zh_CN.UTF-8 不行,有可能要改成 GB2312:
export LC_CTYPE="zh_CN.GB2312"
另外,看别人的帖子,有的变量名不同,用的是:
export LANG="zh_CN.UTF-8"

来自:
http://www.toplee.com/blog/566.html
http://svnbook.red-bean.com/en/1.2/svn.advanced.l10n.html

——————————————————————————————————————
方法一:只需要修改bash_profile文件就可以,添加下面几行:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
然后source一下:
. ~/.bashrc
这时候,再重新进行SVN操作就会再报svn: Can't convert string from 'UTF-8' to native encoding:的错误了。

方法二:另一种解决办法
解决办法很简单,正确设置当前系统的 locale:
export LC_CTYPE=“zh_CN.UTF-8″
然后重新 checkout 即可。

摘自:http://www.111cn.net/sys/linux/60107.htm
[创建本地yum源]
挂载iso文件
mount -o loop -t iso9660 CentOS-6.3-x86_64-bin-DVD1.iso /mnt
设置本地yum源
在/etc/yum.repos.d/创建   “任意文件名.repo"    文件  
vi 刚才新建的文件名编辑
【localyum】任意名称 ,不能有空格。
name= local yum  任意名称
baseurl=file:////mnt/Packages      这个路径是自定的。Server为光盘中的Server目录 ,Packages与Server放在同一目录下。即/software目录下
enabled=1   代表   生效     0为不生效
gpgcheck=1   检查gpgkey  1 生效   0不生效
gpgkey=file:///software    安装光盘里有这个文件        不指定  安装时,可能提示没有注册
保存退出
执行命令 yum clean all

摘自:http://www.server110.com/kvm/201310/2721.html
背景:经常用Windows的小乌龟提交东西习惯了后,发现Linux下修改一个文件后,再sz下来,再用那个小乌龟太麻烦,直接svn ci得了,但发出冲突,如何解决冲突是一个关键,于是此篇博文产生了,来自网上。
[版本控制]Linux下的svn命令行和Windows下中解决冲突有关问题步骤。
一、Linux下:svn命令行中解决冲突问题
如果不小心提交了一些动态改变根本不需要的文件到svn服务器上,出现冲突如何解决,基本思路是首先使用svn resolved filename 放弃对文件的修改,然后就可以提交上去了。然后svn rm test.log删除掉这个文件。然后再次提交,如果其他人更新的也同样处理。
1.svn ci -m "update"
svn: Commit failed (details follow):
svn: Aborting commit: 'test.log' remains in conflict
2.使用svn resolved test.log
3.svn ci -m "update"
这个时候应该可以提交了
4.svn rm test.log
删除掉这个文件
5.svn ci -m "update"
再次提交
这个时候服务器上就没有这个文件了。
在其他的服务器终端上如果遇到这个问题的时候重复这个操作。

http://www.myexception.cn/cvs-svn/486458.html

二、Windows下:svn更新报错 remains in tree-conflict
今天做项目,svn报错
xx remains in tree-conflict
更新可以,commit 不行.网上找到解决方法
右击冲突的文件或文件夹(一般上面有个感叹号)选择Edit TreeConflicts
有2个按钮(全英文的)
keep the directory from the reostitroy和Mark the conflict as resovled(我是点选这个就好了).
希望对大家有帮助,谢谢.

http://jfbcb.com/article/detail/54
如何让c编译器是c99标准:   gcc mallocPointerTest.c --std=c99

错误:只允许在 C99 模式下使用‘for’循环初始化声明 用gcc编译出现,???  
mallocPointerTest.c:5: 错误:只允许在 C99 模式下使用‘for’循环初始化声明
mallocPointerTest.c:5: 附注:使用 -std=c99 或 -std=gnu99 来编译您的代码
c语言有很多标准
以前的标准不允许for(int i=0;;)这中格式
而c99的模式允许了
你的c编译器不是c99标准
for(int i=0;;)
所有你应该这样改
int i;
for(i=0;;);
__________________________________________________________
c语言有很多标准
以前的标准不允许for(int i=0;;)这中格式
而c99的模式允许了
你的c编译器不是c99标准
for(int i=0;;)
所有你应该这样改
int i;
for(i=0;;);
追问
所有你应该这样改
int i;
for(i=0;;);
为什么,                                            
如何让c编译器是c99标准:
   gcc mallocPointerTest.c --std=c99
来自:http://bbs.chinaunix.net/thread-803643-1-1.html
http://blog.163.com/zhaoxiaosen_2008@126/blog/static/105797239201344517767/
VPS服务器使用必须注意的七大事项
<1>.强烈的建议您在使用VPS的时候也和使用自己的系统一样,养成文件分类管理的习惯.
<2>.勤备份数据,强烈建议您每周进行至少两次的备份.
<3>.如果在不知道具体作用的情况下,请不要任意卸载天下数据预安装的程序,否则可能造成您的VPS服务器不能正常使用和管理.
<4>.客户自己的数据,请全部放置在D磁盘内,不要放置在C盘根目录或者直接放置在桌面上.尤其是站点程序文件和数据库文件等比较重要的数据.
<5>.请不要在VPS服务器上面放置具有攻击性和黑客性质的程序,以免造后面程序的漏洞或者不可预知的故障给你带来不可修复的后果.
<6>.天下数据强烈建议不要在VPS服务器内浏览WEB页面.
<7>天下数据强烈建议管理VPS的人员进行专人管理,并且做好文件操作日志记录,系统设置记录等,方便可以及时的为客户解决问题.
来自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73c6f968d4c68d4e419cf791d1b0731b0ed30226604d7c77e6304b8492ae9e73604341420c0c18ed714c9fecf6879876376310b873105a31cb8bf3132b057872eeab81897ad813684dad7c4de2444bb20120a8be7fd5b1765cb78f1642695a38e3b154866bafa4765e858073eee5057c747ee91467970f6e1dd2d18837d873150c1&p=8b2a9715d9c340a90cabd027174f90&newp=882a9544d09502e40be296224f4d9e231610db2151d6d2132997d8&user=baidu&fm=sc&query=vps%B7%FE%CE%F1%C6%F7%CA%B9%D3%C3%D7%A2%D2%E2%CA%C2%CF%EE+FreeBSD&qid=&p1=11
——————————VPS服务器使用注意事项(windows版)———————————
1.打开远程桌面登陆器:
  开始-----运行-----mstsc 
  或者 开始——所以程序——附近——远程桌面连接
2. 造成帐户卡死的情况分为多种.
  第一种.客户端同时登陆,造成帐户卡死.
  第二种,某一帐户在运行某些程序的中途退出远程
  第三种.某些单用户限制程序被同一系统管理员同时运行.
3. 不要安装第三方防火墙
  如果您需要防火墙,请使用windows自带的防火墙功能,在VPS里安装第三方防火墙会 造成VPS系统崩溃和数据丢失系统会自动获取最新windows补丁并自动进行安装,无需人工干预,在VPS里安装系统补丁,严重时会导致VPS系统崩溃和数据丢失
 不要修改远程桌面连接端口
   由于VPS系统的特殊性,默认远程桌面端口为3389,不可随意更改,否则会无法进行远程连接
4.除了某些程序必须在用户登陆的情况下运行的情况外, 建议退出远程连接时注销用户, 能节省内存资源, 并防止下次登陆出现超出最大连接数的情况. 如果出现超出最大连接数的情况, 可以重起VPS.
5.VPS交付使用时已经做了相关的安全设置, 安全性比较高, 建议不要随便开启防火墙, 如果自己开启防火墙, 也一定要打开以下必要端口:21(FTP), 3389(远程连接), 80(网站http),3306(MySQL),1433(SQL Server). 定时检查是否有可疑账号和系统日志, 发现可疑文件和进程可以下载360安全卫士进行检查. 注意网站文件夹的权限设置, 由于VPS被入侵导致资料被删除, 后果自行负责.
6.尽量不要手动修改注册表, 以免VPS启动不了. 修改远程端口务必先在防火墙中添加修改后的端口, 再进行重起. 万一出现远程连接端口被防火墙屏蔽, 请及时联系我们.
  7.修改IIS的配置文件, 务必先把文件备份, 然后用能保留文件格式的软件修改, 防止配置文件格式被破坏导致IIS无法使用.
 8.VPS的网站服务和IIS的FTP服务默认是手动开启的, 如果是站长请把服务中的最后一个即World Wide Web Publishing Service设置成自动, 如果需要经常使用IIS的FTP服务请把FTP Publishing Service服务设成自动, 即能实现开机自动启动. 如果用的是serv-u, 把设成系统服务的选项钩上即可. 从安全性和资源消耗方面来说, 建议不经常使用FTP的用户不要设成自动

来自:http://www.idcbest.com/help/html/zhujizuyongtuoguan/299.html

———————linux下使用ssh管理VPS的注意事项小结:———————
笔者采用key文件交互登录的方式连接ssh。因此,第一步要生成ssh的key文件。

1、ssh-keygen

2、接着,将服务器上的密钥、公钥下载下来。保存在当前用户的.ssh文件夹下。

这里需要注意的问题是一定两个都要下载,只下载密钥,会提示需要公钥。putty貌似米有这个问题,直接下载密钥然后转换一下就可以了。

ssh的登录问题解决完毕,紧接着 ,新的问题又来了;由于笔者在公司通过内网HTTP代理方式上网。貌似代理无法直接在ssh上使用。笔者在查阅资料后发现。ssh需要经过tunnel(隧道)来使用HTTP代理(或者还有其他好方法?笔者还不知道=_=!,各位网友不吝赐教)。

1、下载一个tunnel软件,如 corkscrew 下载地址 解压后,编译

tar zxf corkscrew-2.0.tar.gz

cd corkscrew-2.0

./configure

make && make install

2、修改ssh配置

vi /etc/ssh/ssh_config

添加

Host *

ProxyCommand corkscrew server port %h %p

保存后,可以直接使用ssh登录了^_^
来自:http://www.51res.net/html/2003/0402/25969.html
经过 5 个 RC 版本后,FreeBSD 10.0 正式版终于发布了!!!
下载地址:http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.0/

在 FreeBSD 10.0 上安装和配置 Nginx+PHP+APC+MySQL:
http://www.tuicool.com/articles/M7RvMzi

FreeBSD 10 + Nginx 1.4.4 + PHP 5.5.9 + MySQL 5.6.15

How to Install Nginx and PHP-FPM on FreeBSD 10
:
http://netkiller.github.io/journal/freebsd.php.html

FreeBSD官网:
http://www.freebsd.org/

FreeBSD 10下载地址:
下载地址:http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.0/
背景:一些日志目录做一些软链接到某些位置方便查看,但同时有个问题是目录多了,不知有多少个软链接。
找到文件夹下所有的软链接




一、查到所有软连接的目录的Command,实践Ok:



二、查找目录下的软链接文件:
find -L . -name "*.sql"


三、查找软链接目录里的某文件:
估计需要结合一,后再查找。

来自:http://bbs.chinaunix.net/thread-4057023-1-1.html

问题:
stat-x filename.txt中有Links: 1
文件的硬链接数,表示有多少个文件名指向该 inode。这里表示只有一个文件名指向该文件。
有没有类似上面的查看到软链接数呢

回答:
没有直接的命令可以显示软链接的数量,因为软链接与硬链接不同,它只是一个指向目标文件或目录的文件,通常不使用 inode 计数。然而,你可以通过以下方式查看软链接的相关信息:

1. **查看一个文件或目录是否有软链接指向它:**
   - 你可以使用 `find` 命令来查找指向某个文件的软链接。例如,查找指向 `filename.txt` 的软链接:

   ```bash
   find / -type l -lname "$(realpath filename.txt)"
   ```

   这条命令会在整个文件系统中查找所有指向 `filename.txt` 的软链接。

2. **列出某个目录下的所有软链接:**
   - 你可以使用 `ls` 命令配合 `-l` 选项来查看目录中的软链接:

   ```bash
   ls -l /path/to/directory | grep '^l'
   ```

   这将列出 `/path/to/directory` 目录下的所有软链接。

3. **统计某个目录下的软链接数量:**
   - 你可以使用 `find` 命令统计目录下的软链接数量:

   ```bash
   find /path/to/directory -type l | wc -l
   ```

   这条命令会返回 `/path/to/directory` 目录及其子目录中软链接的总数。

软链接本质上是独立的文件,因此系统并不维护指向某个文件的软链接数量,这也是为什么没有类似 `stat` 查看硬链接数的工具来查看软链接数量。
背景:
ssh作连接时:
[root@localhost ~]# ssh -l xiangdong 192.168.1.108
Address 192.168.1.108 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
xiangdong@192.168.1.108's password:
Last login: Tue May  6 16:10:52 2014 from 10.70.38.87
/etc/sysconfig/bash-prompt-xterm: line 1: ifconfig: command not found ==》 yum install -y net-tools

一般是在配置无密码登录时引起的:
http://hi.baidu.com/tanggaohui/item/4fcf24372225143f2f20c4d0

GSSAPIAuthentication  这个设置项到底是什么作用了 ?
在securecrt 关闭、开启 GSSAPI,在登陆服务器时好像没什么影响。。。
答:这个是可选,而且和顺序有关,你如果使用密码认证,你进系统,和下面那个都无任何关系
阅读全文
修改  /etc/ssh/ssh_config
vim  /etc/ssh/ssh_config
GSSAPIAuthentication no
----------------------------------
修改  /etc/ssh/ssh_config
vim  /etc/ssh/ssh_config
在server 把GSSAPIAuthentication yes
后面的yes 改成no
然后/etc/init.d/sshd restart
来自:http://jafy00.blog.51cto.com/2594646/810716
http://fleiou2008.blog.163.com/blog/static/819810172012631111922846/
零、一段监听端口的shell:

摘自:http://ajiewps.sinaapp.com/?p=266

一、通过shell脚本重定向实现监控memcache状态:

通过nc命令实现:
[chengmo@centos5 shell]$ (echo "stats")|nc 127.0.0.1 11211
二、通过重定向读取远程web服务器头信息:
(echo -e "HEAD / HTTP/1.1\n\n\n\n\n";sleep 2)|telnet www.baidu.com 80

参考:http://www.cnblogs.com/chengmo/archive/2010/10/22/1858302.html
背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况。

一、 linux ps命令,查看某进程cpu和内存占用率情况
[root@test vhost]# ps aux
USER       PID  %CPU    %MEM    VSZ   RSS TTY      STAT    START   TIME COMMAND
解释:
linux 下的ps命令
USER 进程运行用户
PID    进程编号
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小
RSS 进程使用的驻留集大小或者是实际内存的大小
TTY 与进程关联的终端(tty)
STAT 检查的状态:进程状态使用字符表示的,如R(running正在运行或准备运行)、S(sleeping睡眠)、I(idle空闲)、Z (僵死)、D(不可中断的睡眠,通常是I/O)、P(等待交换页)、W(换出,表示当前页面不在内存)、N(低优先级任务)T(terminate终止)、W has no resident pages
START (进程启动时间和日期)
TIME ;(进程使用的总cpu时间)
COMMAND (正在执行的命令行命令)
NI (nice)优先级
PRI 进程优先级编号
PPID 父进程的进程ID(parent process id)
SID 会话ID(session id)
WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS 与进程相关的数字标识
————————————由上面列的输出后于是可以通过awk进行对特定列进行输出————————————

查看用户的一个进程运行情况参数o:

摘自:http://www.commandlinefu.com/commands/view/7244/micro-ps-aux-by-memcpu




二、 linux ps命令,查看进程cpu和内存占用率排序
使用以下命令查看:
ps -aux | sort -k4,4n
ps auxw --sort=rss
ps auxw --sort=%cpu

摘录自:http://blog.chinaunix.net/uid-21389973-id-3292358.html
背景:昨天一QQ群里的兄弟问了个问题:并发数 和  TPS 有什么联系吗?我在微信里作了下简单回答如下,顺带今天了解下其它参数。
TPS 是Transactions Per Second 的 缩 写, 也 就 是 事 务 数/ 秒。 它 是软件测试结 果 的 测 量 单 位。 一 个 事 务 是 指 一 个 客 户 机 向 服 务 器 发 送 请 求 然 后 服 务 器 做 出 反 应 的 过 程。 客 户 机 在 发 送 请 求 时 开 始 计 时, 收 到 服 务 器 响 应 后 结 束 计 时, 以 此 来 计 算 使 用 的 时 间 和 完 成 的 事 务 个 数, 最 终 利 用 这 些 信 息 来 估 计 得 分。 客 户 机 使 用 加 权 协 函 数 平 均 方 法 来 计 算 客 户 机 的得 分,测试软件就是 利 用 客 户 机 的 这 些 信 息 使 用 加 权 协 函 数 平 均 方 法 来 计 算 服 务 器 端 的 整 体TPS 得 分。

如求TPS,例子,一个软件测试以并发2000,发现其经过1分钟后软件给出Response Time(sec)一条曲线,在0.2左右。
此时TPS=并发数/平均响应时间(平均)=2000/0.2 = 10000,1w并发,也就是说能接受1万的并发值,注意是平均响应。阅读全文
C语言中获得系统当前的日期和时间

一、代码如下:


二、执行如下:
[root@test http_pcap_codes]# ./a.out
Year:  2014
Month:  2
Day:  8
Hour:  16
Minute:  55
Second:  9
Weekday:  6
Days:  38
Isdst:  0

上面的这些日期可以通过c函数连接起来实现:20140208 的按时间的目录结构
原代码来自里面localtime写错了:
http://www.linuxidc.com/Linux/2012-07/65059.htm
直接整数转也成:
snprintf(szValue,100,"%04d%02d%02d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);                                                        
printf("%s",szValue)

整数转为char后再进行snprintf转代码%s(简单示例),snprintf参考:http://jackxiang.com/post/3736/
操作TortoiseSVN时,报如下错误:
      Command Update
      Repository UUID 'xxxxxxxx' doesn't match expected
      UUID 'xxxxxxxx'
      Finished!

这个在windows下是看不到uuid的,但是在Linux下的svn client是能看到的,分别讲下在哪儿:
1)Windows下的小乌龟是在.svn/wc.db里能找到,但是不报错这个是没法直接查到的,打开这个db文件搜索下svn的http地址内容就在它旁边能找到uuid,长得像这样,里而且多个一样的URL,这样不太好找:9b35ebc1-e2f0-4571-a2aa-cca3a5a3be64。
2)Linux下可直接用svn info能获取到,如svn info svn目录,或svn info svn的http地址信息。

sha1$e059139d119b69af6510ac5971fcfb4aa3bbbc64

      可以看到,原来Repository创建者的UUID是前者,而现在所操作的是后者的UUID。因此,目前的解决办法是:使用相关命令更新Repository的UUID。

具体办法如下:
      1、首先查看项目的所有者的UUID
      # svnlook uuid /var/svn/repos
      xxxxxxx

      2、更新项目的UUID
      # svnadmin setuuid /var/svn/repos xxxxxxx

      3、查看一下更新后的UUID
      # svnlook uuid /var/svn/repos

     是在linux下的tortoise服务器的仓库里面看,如下:
         /usr/local/subversion/bin/svnlook uuid  /data/subversion/levoo
         400fc8d2-0ce3-4270-bfba-d81f7d67c23b


附:
      UUID是repository创建时自动生成的一个随机数, SVN Client利用UUID判断是否为同一个resp。一般遇到UUID不同时,需要重新checkout

摘自:http://blog.csdn.net/xuzhuang2008/article/details/8474229


1.  客户端   在工作目录上右键-> TortoiseSVN-> 重新定位(Relocate)
2.   如果显示 uuid冲突时, 先显示现有版本,再设置新的id。

    服务器在项目上右键->所有任务->start Command Prompt        
    H:\backup\DS9000>svnlook uuid  .
           3219074f-d8da-2248-814a-399c5442be0a

    H:\backup\DS9000>svnadmin  setuuid   .  a3880bf4-0eb5-d74c-8d1e-3d6c595fa54e

    H:\backup\DS9000>svnlook uuid  .
     a3880bf4-0eb5-d74c-8d1e-3d6c595fa54e

来自:http://blog.sina.com.cn/s/blog_727b5d7c0100ogo1.html
分页: 31/40 第一页 上页 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 下页 最后页 [ 显示模式: 摘要 | 列表 ]