加载中…
搜博主文章
个人资料
n4mine
n4mine
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,871
  • 关注人气:3
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
分类
新浪微博
访客
加载中…
好友
加载中…
评论
加载中…
留言
加载中…
博文
(2014-05-11 21:41)
标签:

杂谈

tcp状态变迁图理解:

syn_sent、syn_recv、estab没什么说的。

主动关闭方会有两次fin_wait:

fin_wait1等待发出去的fin的ack

fin_wait2等待对方的fin

然后主动方发ack进入time_wait等待2msl超时①防止发出去的ack对方未收到重发fin时本端再次发ack,②防止原socket重新使用。

被动方收到fin就进入close_wait状态。ack确认主动方的fin之后发出fin进入last_ack状态来等待最后一个ack,之后进入closed状态。

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

杂谈

nginx first searches for the most specific prefix location given by literal strings regardless of the listed order.

The location“/” matches any request so it will be used as a last resort.

Then nginx checks locations given by regular expression_r in the order listed in the configuration file.

The first matching expression_r stops the search and nginx will use this location.

If no regular expression_r matches a request, then nginx uses the most specific prefix location found earlier

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

杂谈

角色:

client

user/resource owner

authorization server

resource server

场景:

user要client有限制的访问其在resource server上的resource

过程:

1. user浏览器访问client提供的接口

2. client将user踢到authorization server处(http重定向或其他技术,一般是authorization server提供一个登录接口),目的是要一个code

此时需携带

①client_id:用于标识client的身份,authentication

②response type:code;

③redirect_uri:用于跳转回来;

④scope:作用域;

⑤state:防止csrf攻击;

3. user登录上步中的接口,授权,将code(一般都是一次性的)带回给client(http重定向或其他技术)

此步用于

①authorization server对user的authentication

②user对client的authorization

4. client拿到code后,拿着code去authorization换取accessToken

5. client拿到accessToken后,即可访问user在resource se

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

杂谈

先说背景:

某程序,叫它bu吧。 功能是指定本地文件到hdfs上做备份。ruby写的。 

运行后报错信息如下: 

Error. update env failed. Exit now.

W, [2014-02-19T07:27:12.289026 #3946] WARN -- : ** [Raven] Error from Sentry server (400): Invalid project_id: u'10'

#<NoMethodError: undefined method `message' for 'check env failed':String> 

作为ruby小白的我是看不懂这样的信息的。

但第一行的 “Error. update env failed. Exit now.”一般都是自定义的错误信息。剩下两行是程序自动打出的错误信息。

那好,我把第二行中的“[Raven] Error from Sentry server (400): Invalid project_id”拿到google上去搜。没什么有用的信息。

但我现在可以找到bu这个程序的源码所在位置。 

那么那第一行有可能是自定义错误的字符串去搜索: 

grep -ri 'update env failed' * 

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

杂谈

场景描述:

2月15号,某服务器当机,重启

2月16号,接到告警,该服务器/data分区无free空间,/data分区是我们服务放置的分区。

排查过程: 

du查看/data分区,发现一些服务logs文件占满作怪,tmpwatch删,以为了之

N个小时后,再次告警

查看具体log文件的内容,大量too many open files占据差不多整个log文件

查看fs.file-max,上千万,没问题

查看具体process的limit,1024,有问题

追溯问题,具体服务是由supervisor管理,查看supervisor的limit,也是1024

查看supervisor启动方式,是由/etc/rc3.d/S64supervisord,启动顺序为64。

ulimit的max open files是装机时写到/etc/rc.local里面的:

ulimit -Hn 3000240

ulimit -Sn 1500240

而/etc/rc.local的启动顺序是99,也就是最后一个启动的(默认情况下)

/etc/rc.local的说明为:

# This script will be executed *after* all the other init scripts.

关于fs.file-max和ulimit的描述:

fs.

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

博客七周年

我的博客今天1194天了,我领取了徽章.  

  • 2011.04.24,我在新浪博客安家。
  • 2012.10.02,我写下了第一篇博文:《我的博客今天1岁163天了,我领取了新锐博主徽章》。
  • 至今,我的博客共获得
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
#shell调试
bash的几个option,可以帮助我们调试shell脚本程序
bash -n(noexec)或者在脚本中/shell中执行set -o noexec,不运行命令,只检查语法错误
bash -v(verbose)或者在脚本中/shell中执行set -o verbose,在运行命令前回送
bash -x(xtrace)或者在脚本中/shell中执行set -o xtrace,在命令行处理后回送命令

例子:
[root@localhost ~]# cat 2
lfa
[root@localhost ~]#
[root@localhost ~]# bash -n 2 #注意有的语法错误是检查不出来的,比如2里面的内容
[root@localhost ~]# bash -v 2
lfa
2: line 1: lfa: command not found
[root@localhost ~]# bash -x 2
+ lfa
2: line 1: lfa: command not found

#bash -x中:
xtrace在每一行的开始都打印+(每个+代表扩展一个层次)
+的提示符是在PS4中定制的。
[root@localhost ~]# echo $PS4
+
如果PS4被定义成为一个字符串,例如'xtrace-->',多余多层扩展,只会打印PS4的第一个字符,增加了可读性。

#定制PS4的一种更好的方法是使用内置变量:LINENO,
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
#进程ID和作业编号
[root@localhost ~]# ls &
[1] 30729
如上操作,30729就是进程的进程ID,[1]为shell(注意是shell而不是os)设置的作业编号。
作业编号和进程ID的不同:
作业编号指向当前运行在用户shell下的后台进程。
进程ID指向当前运行在整个系统上的所有用户的所有进程。

如果再次执行一个后台作业:
ls &
[2] 30736
[1]   Done
则编号变为2。

#[root@localhost ~]#
[1]+  Done                    find / -type f >&/dev/null
上面输出表示一个后台进程完成(Done)

[1]+ Exit 1
表示后台作业以非0状态退出。

#作业的控制
内置命令fg将后台作业放到前台。即意味着作业拥有了对终端或窗口的控制,并因此可以接受用户输入。

如果只有一个后台作业,可以使用不带参数的fg。
如果有多个后台作业,shell会挑出最新在后台运行的作业放到前台。
如果要指定后台作业置
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
#read处理输入行的方式:处理单引号(' ')、双引号(' ')和反斜线;它依据环境变量IFS中的分隔符将行分成各个单词,并把单词赋值给shell变量。这也是shell处理命令行的邮给子集

#shell从标准输入或脚本读取的每行称为一个管道行,它包含一或多个由0个或多个管道字符(|)分隔的命令。对其读取的每个管道行,执行如下操作:
1)将命令分成由固定元字符集(meta)分隔的记号(token):SPACE、TAB、NEWLINE、;、(、)、<、>、|、和&。记号类型包括单词、关键字、I/O重定向符和分号。
2)检测每个命令的第一个记号,查看其是否为不带引号或反斜线的关键字。如果是一个开放的关键字,如if和其他控制结构起始字符串、funtion、{或 (,则命令实际上为一个复合命令。shell在内部对复合命令进行处理,读取下一命令,并重复这一过程。如果关键字不是复合命令起始字符串(例如,是一个 控制结构中间出现的关键字,如then、else、或do和类似于fi或done的结束关键字或逻辑操作符),则shell给出语法错误信号。
3)依据别名列表检查每个命令的第一个关键字。如果找到相应匹配,则替换其别名定义,并退回到第1步;否则进入第4步,该策略允许
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
#I/O重定向符


#“>>”和“>|”是标准输出重定向“>”的简单变体。如果输出文件存在则“>>”将输出附加到文件末尾;如果不存在,则其行为类似“>”。

前面说过可以命令set -o noclobber使>file防止shell重写一个文件,而“>|”重载noclobber,表示“Do it anyway, dammit!”

#重定向符“<>”主要用户设备文件,也就是对应诸如终端和通信线路的硬件设备。

#here-docment
<< label:强制一个命令的输入使用shell的标准输入,并一直读到仅含label的行。期间的输入称为here-docment。例子:
[root@localhost shell]# cat << ABC
> fa
> abc
> ABCD
> ABC
fa
abc
ABCD

#重定向符“<<”的两个变体:
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有