码迷,mamicode.com
首页 > 系统相关 > 详细

Linux服务器开发常用的命令以及遇到的问题

时间:2015-10-11 23:18:17      阅读:692      评论:0      收藏:0      [点我收藏+]

标签:

1. 什么是linux服务器load average?

Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多。
参考资料:http://en.wikipedia.org/wiki/Load_average

2. 如何查看linux服务器负载

可以通过w,top,uptime,procinfo命令,也可以通过/proc/loadavg文件查看。

3. 服务器负载高怎么办?

服务器负载(load/load average)是根据进程队列的长度来显示的。
当服务器出现负载高的现象时(建议以15分钟平均值为参考),可能是由于CPU资源不足,I/O读写瓶颈,内存资源不足等原因造成,也可能是由于CPU正在进行密集型计算。
建议使用vmstat -x,iostat,top命令判断负载过高的原因,然后找到具体占用大量资源的进程进行优化处理。

4. 如何查看服务器内存使用率?

可以通过free,top(执行后可通过shitf+m对内存排序),vmstat,procinfo命令,也可以通过/proc/meminfo文件查看。

5. 如何查看单个进程占用的内存大小?

可以使用top -p PID,pmap -x PID,ps aux|grep PID命令,也可以通过/proc/$process_id(进程的PID)/status文件查看,例如/proc/7159/status文件。

6. 无法从linux服务器A登录到服务器B怎么办?

请开发者首先确认服务器A和B是属于同一个应用,不同应用无法交叉登录。
1. 当服务器A无法登录服务器B时,可以使用ping IP和telnet IP 36000命令确认服务器B是否死机,ssh服务是否正常。
如果有异常,登录open.qq.com管理中心重启服务器(详细操作说明见:CVM_V2申请和管理#3.2 服务器重启)。
2. 如果可以通过客户端直接访问服务器B,但是不能从服务器A登录服务器B,请通过企业QQ联系运维支持协助定位。

7. 如何查看正在使用的服务和端口?

可以使用netstat -tunlp,netstat -antup,lsof -i:PORT命令查看。

8. 如何查看服务器进程信息?

可以使用ps auxww|grep PID,ps -ef,lsof -p PID,top -p PID命令查看。

9. 如何杀死进程?

可以使用kill -9 PID(进程号),killall 程序名(比如killall cron)来杀死进程。
如果要杀死的是僵尸进程,则需要杀掉进程的父进程才有效果,命令为: kill -9 ppid(ppid为父进程ID号,可以通过ps -o ppid PID查找,例如ps -o ppid 32535)。

10. 如何查找僵尸进程?

可以使用top命令查看僵尸进程(zombie)的总数,使用ps -ef | grep defunct | grep -v grep查找具体僵尸进程的信息。

11. 如何在内网服务器间传输数据?

同一应用下的不同机器,可以通过如下命令实现文件传输:

scp -P port(使用36000端口) /home/user/localfilename(本地文件路径) user(使用appid)@serverip:/home/user/removefilename(目标文件路径)

rsync -e ‘ssh -p port(使用36000端口) -q‘ /home/user/localfilename (本地文件路径) user(使用appid)@serverip:/home/user/removefilename(目标文件路径)

12. 为什么启动不了服务器端口?

服务器端口的启动监听,需要从操作系统本身以及应用程序查看。
linux操作系统1024以下的端口只能由root用户启动,即需要先运行sudo su –获取root权限后再启用服务端口。
应用程序问题,建议通过应用程序启动日志来排查失败原因,例如端口冲突(腾讯服务器系统使用端口不能占用,比如36000),配置问题等。

13. 常用的linux服务器性能查看命令有哪些?

命令名称 说明
top 进程监控命令,用来监控系统的整体性能。

可以显示系统负载,进程,cpu,内存,分页等信息,常用shift+m和shift+p来按memory和cpu使用对进程进行排序。

vmstat 系统监控命令,重点侧重于虚拟内存,也可以监控cpu,进程,内存分页以及IO的状态信息。

例如,vmstat 3 10,每隔3秒输出结果,执行10次。

iostatc 用于输出cpu状态和IO状态的工具,可以详细展示系统的IO信息。

例如iostat -dxmt 10,每10秒以MB的格式输出IO的详细信息。

df 用来检查系统的磁盘空间占用状况。

例如:df -m,以MB为单位展现磁盘使用状况。

lsof 列举系统中被打开的文件,由于linux是以文件系统为基础,此命令在系统管理中很有帮助。

例如:
lsof -i:36000,显示使用36000端口的进程
lsof -u root,显示以root运行的程序
lsof -c php-fpm,显示php-fpm进程打开的文件
lsof php.ini,显示打开php.ini的进程。

ps 进程查看命令,可以用来显示进程的详细信息。

常用命令参数组合为,ps -ef,ps aux,推荐使用ps -A -o来自定义输出字段。
例如:
ps -A -o pid,stat,uname,%cpu,%mem,rss,args,lstart,etime |sort -k6,6 -rn,按所列字段输出并以第六个字段进行排序
ps -A -o comm |sort -k1 |uniq -c|sort -k1 -rn|head,列出运行实例最多的进程。


其他常用的命令和文件,free -m,du,uptime,w,/proc/stat,/proc/cpuinfo,/proc/meminfo。
参考资料:http://en.wikipedia.org/wiki/Template:Unix_commands,http://www.linuxmanpages.com/


14. Cron不生效怎么办?

排查步骤如下:
1. 确认crontab是否正常运行。
可以运行命令crontab -e添加如下测试条目*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &,然后观察/tmp/crontest文件。
如果有问题,建议使用ps aux|grep cron查找cron的pid,kill -9 PID结束cron进程,然后通过/etc/init.d/cron start重新启动cron。

2. 确认cron条目中的脚本路径为绝对路径。
3. 查看运行cron的用户帐号是否正确,同时查看/etc/cron.deny中是否包含此账户。
4. 检查脚本的执行权限,脚本目录以及日志的文件权限。
5. 建议通过后台方式运行脚本,在脚本条目后添加“&”,例如,*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &

15. 如何设置opensuse服务器开机任务?

Linux内核启动顺序为:
/sbin/init进程启动,
然后依次执行init初始脚本,
运行级别脚本/etc/rc.d/rc*.d,*号值等于运行模式,可以在/etc/inittab中查看,
最后是/etc/rc.d/rc.local。

如果需要配置开机任务,可以在/etc/rc.d/rc*.d中的S**rclocal文件配置,也可以在/etc/rc.d/rc.local中配置。

16. 为什么服务器硬盘只读?

硬盘只读的常见原因如下:
1. 磁盘空间满
可以通过df -m命令查看磁盘使用情况,然后删除多余的文件释放磁盘空间(非第三方文件不建议删除,如果需要请联系企业QQ确认);
2. 磁盘inode资源占用完
可以通过df -i命令查看,确认相关的进程;
3. 硬件故障。

如果hosting应用通过上述方式仍无法确认原因,请通过企业QQ联系运维支持协助定位。

17. 如何查看linux系统日志?

系统级别的日志文件存放路径为/var/log。
常用的系统日志为/var/log/messages 。

18. 如何查找文件系统大文件?

可以首先通过df命令查看磁盘分区使用情况,比如df -m;
然后:
通过du命令查看具体文件夹的大小,比如du -sh ./*,du -h --max-depth=1|head -10;
使用ls命令列出文件以及大小,比如ls -lSh;
另外,也可以通过find命令直接查看特定目录下的文件大小,比如find / -type f -size +10M -exec ls -lrt {} \;

19. 如何查看服务器操作系统版本?

可以通过下列命令查看系统版本:
uname -a,cat /proc/version,cat /etc/issue

20. 如何重启服务器?

方式1:
登录open.qq.com管理中心重启服务器(详细操作说明见:CVM_V2申请和管理#3.2 服务器重启)。

方式2:如果方式1不生效,可以尝试在服务器上以root运行reboot命令进行重启。

21. 为什么linux终端显示中文会出现乱码?

服务器本身没有对显示语言有限制,如果是终端软件的影响中文的显示
可以尝试调整 选项-会话选项-外观(secureCRT设置,其他版本软件请查找相关设置);
如果是纯Linux shell出现乱码,请使用export命令查看用户环境变量,查看LANG,LC_CTYPE等环境变量设置。

22. 如何设置通过SecureCRT连接CVM服务器的超时时间?

可以通过如下设置,使SecureCRT连接CVM时,不断开连接:
打开secureCRT选项(Options),选择会话选项(Session Opetions),点击终端(Terminal),在右侧反空闲(Anti-idle)的框中勾选发送协议NO-OP(Send protocol NO-OP),时间设置为每120秒(every 120 seconds)。

24. 如何获得CVM的root权限?

详见:root权限说明

25. 为什么删除linux服务器上的文件,硬盘空间不释放?

现象:
登录linux服务器,执行 rm 命令删除文件,用 df 命令查看硬盘空间,发现删除文件后,可用的硬盘空间没有增加。
原因:
通过 rm 命令删除文件的时候,如果正好有其它进程在访问该文件,通过 df 命令查看,删除的文件占用的空间是没有立即释放的。
解决方法:
使用root权限执行 lsof |grep deleted ,查看正在使用被删除文件的进程的PID,通过命令 kill -9 PID 杀掉对应的进程即可。

1. 访问应用慢怎么办?

首先开发者需确认访问慢的原因,包括用户原因,网络原因,服务端原因。
1. 用户原因建议从以下方面排查:
用户电脑性能,电脑病毒,DNS缓存和设置,上网代理,防火墙设置,浏览器版本和插件等,可以通过换电脑测试。

2.网络原因建议从以下方面排查:
确定用户的IP以及网络运营商,域名解析是否正确,是否存在跨网,局域网额外限制,到其他公网服务是否正常,到相关服务器或网络中间路由节点的网络延迟,有无丢包,小运营商网络不稳定等。
建议通过异地正常网络使用相同帐号测试。

3. 服务端问题建议从以下方面排查:
平台问题,如CDN异常,请求转发异常等;服务端问题,如服务器性能,进程状况,程序异常等。

排查时,请配合使用如tcpdump,tracert等各种命令,以及httpwatch,wireshark等抓包工具。
如通过上述技术手段还无法解决,请提供以上排查信息和数据,通过企业QQ联系运维支持协助定位。

2. 常用的网络排障命令?

命令名称 说明
Ipconfig/ifconfig 显示计算机TCP/IP的详细配置,包括DNS信息,例如ipconfig /all,ipconfig /displaydns。

Ping 包发送命令,可以模拟诊断延迟,丢包,测试网络状况,例如linux:ping 10.1.1.1 -c 10 -s 800,ping 10.1.1.1 -i 0.5,windows:ping qq.com -t,ping 10.1.1.1 -n 8 -l 800。
Tracert/traceroute 跟踪路由,显示数据包到达目的的路径及各节点的时间,可以用来发现运营商节点问题和跨网问题等,如tracert qq.com。
Telnet 远程登录服务命令,主要用于测试端口状态,例如telnet 10.1.1.1 8001。
Nslookup 域名查询工具,主要用来查看域名解析是否正确。
Netstat wc,netstat -an等。


3. 常用的网络抓包工具?

工具名称 说明
Tcpdump 适用于linux系统。

网络数据采集分析工具,可以对网络数据包进行截获和分析。
通过设定参数来实现对网络数据包的各种监控与分析。
例如,tcpdump -i any -nn tcp and port 443,tcpdump -i any "host 10.1.1.1" -n,tcpdump -s 0 -nX -i eth0 host 113.108.20.23等。

Httpwatch 适用于windows系统。

强大的网页数据分析工具,集成在IE浏览器,也可支持firefox,可以用来诊断前台接口调试,CDN下载资源慢和页面响应慢等问题。
建议使用专业版。

Fiddler 适用于windows系统。

独立的网络抓包工具,可监听所有电脑和互联网的http通讯,可以用来调试和诊断web服务和本地http的交互等问题。

Wireshark 适用于windows和linux系统。

网络封包分析软件,可以实时分析所有支持协议的通讯数据


4. 如何查看IP来源及所属运营商?

请通过以下网站查询:
Ip.qq.com, ip138.com

5. 如何修改windows本地dns设置?

方法一:
WinXP:
右键网上邻居—>属性(R)—>右键本地链接—>属性(P),双击Internet协议版本4(TCP/IPV4),修改本地DNS设定。
Win7:
开始菜单—>控制面板—>网络和共享中心—>本地连接—>属性(P),双击Internet协议版本4(TCP/IPV4),修改本地DNS设定。

方法二:
开始—>运行—>输入CDM进入到命令模式,输入
命令一:netsh interface ip set dns "网卡名" static 主DNS,
命令二:netsh interface ip set dns "网卡名" static 辅DNS编号(例如:主DNS设定:netsh interface ip set dns "本地连接" static 8.8.8.8,辅DNS设定:netsh interface ip set dns "本地连接" static 8.8.8.8 2)。

6. 如何清理dns缓存?

方法一:
开始菜单—>管理工具—>服务,重启DNS Client和DHCP client两项服务。

方法二:
开始菜单—>运行—>输入CDM进入命令模式,输入ipconfig/flushdns,回车执行,提示成功即可。

7. 端口不通怎么办?

服务端:
确认是否有监听对应的端口,是否有做访问限制。

客户端:
测试连接方式是否正常,例如TELNET只能测试TCP端口,UDP端口可以使用NETCAT等工具进行测试.可以通过wireshark和tcpdump等工具查看具体的数据包走向,明确定位问题。

其他:
腾讯机房禁止不同应用的机器相互访问,如果同一应用内端口无法正常访问,请通过企业QQ联系运维支持查询防火墙设置。

8. Ping不通怎么办?

请确认网络是否可用,域名解析是否正确,服务端是否禁止ICMP包,使用tracert/traceroute协助确定网络故障。
如通过上述技术手段还无法解决,请提供以上排查信息和数据,请通过企业QQ联系运维支持协助定位。

9. Telnet不通怎么办?

Telnet不通,指的是telnet之后没有任何返回,如果直接返回信息,则表示telnet是通的,但是请求被直接拒绝。

故障排查步骤:
在telnet源上,通过ping测试网络是否正常;
在目标机器上,确认服务器是否设置了禁止telnet(默认没有设置),是否监听了正确的IP和端口,可以通过telnet 127.0.0.1测试本地telnet服务;
对于hosting应用,如果通过以上技术手段还无法解决问题,请提供相应信息和数据,请通过企业QQ联系运维支持排查腾讯防火墙设置。

10. Tracert不通怎么办?

tracert不通,指的是从某一节点开始,全部是*,并且无法到达目的,如果只是中间某一个节点出现*,则只能说明该节点禁止被tracert。

故障排查步骤:
从tracert的第一个节点开始,到最后一个可访问节点,查询各节点IP的所属运营商,可以判断网络访问路径以及运营商,然后定位是运营商问题,还是目标服务的问题。
注意,小运营商跨网问题,需要自助向运营商反馈。

11. 如何测试udp端口是否正常?

Udp包的发送和监听可以使用如下方法:
发送udp包,使用netcat命令,例如netcat -v -u 10.1.1.1 8001,同时使用tcpdump或者netcat监听udp请求。

12. 如何判断是否受到DDOS网络攻击?

可以结合以下现象初步判断是否受到DDOS攻击:
机器入流量出现陡增,同时出流量急剧下降;
服务器出现大量SYN,TIME_WAIT等异常连接( netstat –a |awk ‘{print $6}‘ |sort|uniq -c|sort -gk 1);
某些IP访问频率过高,占用大量资源(netstat -tun|awk ‘{print $5}‘|uniq -c|sort -r),导致服务不正常等。

注:腾讯已经对常见的攻击进行了监控和防范,开发者也可结合自身逻辑在服务器端限制特定IP访问。

13. 如何防范DDOS网络攻击?

为了防范DDOS网络攻击,建议开发者进行如下开发:
1. 建议在Server端引入超时机制,对指定时间内未发送请求或是未发完请求的客户端主动断开,规避空连接或是慢速请求攻击;
2. 建议对客户端请求频率做统计,对频繁超过配置的源IP,临时封禁一段时间,或是使用验证码进行限制,防止刷请求;
3. 建议安全保护逻辑前置在所有业务逻辑之前,避免恶意请求消耗过多服务器性能。

14. 服务器如何同时接入电信、联通、移动三网?

应用为了兼顾电信、联通、移动的用户,一般都需要实现三网接入,让三个运营商的用户进入都不需要跨网,保证应用质量。
腾讯开放平台提供了TGW域名接入方案(详见:域名接入),开发者只需要通过域名绑定,让一个域名同时绑定在电信、联通、移动的代理机器上,即可让电信的用户通过电信代理访问应用,联通的用户通过联通的代理进入,移动的用户通过移动的代理进入,满足了应用对三网接入的需求。

15. 用户网络有问题怎么办?

单个用户网络问题,建议开发商协助用户检查其电脑设置,包括DNS,上网代理,防火墙,局域网设置,是否跨网等;
如果是批量用户出现网络问题,可以收集共性信息,比如地域,运营商,访问方式等,然后通过企业QQ联系运维支持进行问题定位和解决。

16. http访问出现40x怎么办?

当http返回码出现40x的时候,表示用户提交的请求被服务器接受,但是被认为是错误的请求,包括:
请求语法错误,请求文件不存在,服务器拒绝请求,客户端请求发送超时等。
开发者需要结合客户端请求和服务端设置来详细定位。详细返回信息信息请参考:
http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

17. http访问出现50x怎么办?

当http返回码出现50x的时候,表示服务器在处理正确请求时,出现了内部错误,属于服务端问题。
建议开发者在服务代码和逻辑中进行定位。详细返回码信息请参考:
http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

以上信息是否解决您的问题?

是否

确定





一、    常用命令

pstree查看进程树。可以很清楚的看到进程之间的关系;

Top:查看各进程的占用资源的情况;

du -h --max-depth=1 显示当前目录中所有子目录的大小;

w 查看服务器的load情况

bigip 在预发布机器上使用命令bigip sh ${ip/机器名} {username}” 可以检查机器是在F5上状态是disable还是enable.

gm.sh "curl http://localhost/monitor/ok.html"     在预发布机器上检查各个服务器的健康检查页面。

gm.sh "ps amx | grep httpd | wc -l"   在预发布机器上检查各个服务器的http链接数

 

二、    proc下的伪文件。 如:meminfo 检查内存信息,cpuinfo 内核信息。

cat /proc/cpuinfo 检查cpu的信息。我们的一些程序根据cpu内核的数量做过优化(如:memcached假的多核可能会引起一些bug。)

技术分享

如上图 baike-web1 4核的,baike-web2是双核超线程的。

拥有相同 physical id 的所有逻辑处理器共享同一个物理插座。每个 physical id 代表一个唯一的物理封装。Siblings 表示位于这一物理封装上的逻辑处理器的数量,如果不存在表示1。每个 core id 均代表一个唯一的处理器内核。所有带有相core id 的逻辑处理器均位于同一个处理器内核上。如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术。如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id不同,则说明这是一个多内核处理器。

 

    网络连接

netstat: -t: 显示TCP链接信息;-u: 显示UDP链接信息;-n直接显示ip,不做名称转换;-p: 显示相应的进程PID以及名称(要root权限)

如果要查看关于sockets更详细占用信息等,可以使用lsof.

a)   netstat -anp|grep java|grep 3306|wc –l检查Java进程中数据库的链接数量

b)   netstat -na|grep ESTABLISHED|awk ‘{print $4}‘|grep ":80$"|wc –l  检查已经建立的80端口的连接数

c)         netstat -na |grep “:2088”  检查搜索引擎的连接数

 

    dump java进程堆栈

a)   kill -3 ${java进程Id},可以在java进程的日志中看到输出(jboss 记录在jboss_stdout.log)

b)   jstack $pid.      直接dump当前进程的的堆栈信息。

对于thread dump信息,主要关注的是线程的状态和其执行堆栈,特别是load很高的时候,通过thread dump可以看到线程到底在干嘛,从中找出问题。 线程的状态一般为三类: runable:当前可以运行的线程, Waiting on monitor:线程主动wait, Waiting for monitor entry:线程等锁. Cpu很忙则关注runnable的线程,Cpu闲则关注waiting for monitor entry的线程。

 

 

    java内存溢出

1 可以先用 jstat  -gcutil ${pid} {interval}  看看java内存回收的动态信息。 interval– 表示间隔打印的时间,单位为毫秒

技术分享

图中参数含义如下:

S0  — Heap上的 Survivor space 0区已使用空间的百分比

S1  — Heap上的 Survivor space 1 区已使用空间的百分比

E   — Heap上的 Eden space 区已使用空间的百分比

O   — Heap上的 Old space 区已使用空间的百分比

P   — Perm space 区已使用空间的百分比

YGC — 从应用程序启动到采样时发生 Young GC 的次数

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

2. 使jmap dump  java内存中全部对象,分析死锁的位置。

jmap -histo $pid  快速查看当前内存中各个Java对象的大小和数量

jmap -dump:live,format=b,file=heap.dmp $pid   可以将jvm堆栈中的信息全部复制到文件head.dmp中,注意这个heap.dmp文件会比较大, 线上jboss分配的内存一般为2g,当内存溢出时dump出来的head.dmp文件也是2g,所以dump的时间也比较长,一般会有半个小时.

日志文件生成后运行命令“jhat -J-mx768m -port 7001 heap.dmp”分析堆栈日志(注意不要在线上服务器上分析)。 访问 http://localhost:7001可以查看分析报告。

或者可以使用eclipse mat插件分析,它可以以图形形式分析出内存中的java对象的分布: (插件地址http://download.eclipse.org/mat/1.0/update-site/).导入后可以生成一个图形报表

技术分享

 

    7001端口报警。

一般情况是jboss挂掉了。因为java进程已经退出。1首先需要查看:jboss_stdout.log,它会告诉你jboss crash的一些信息,它还会告诉你在jboss  crash有一个详细的出错报告, 位置在/web-deploy/bin/hs_err_pid.log

 

    cookie日志分析

cat cookie_log|awk ‘{print $1} ‘|grep -v "172.16"|grep -v "127.0.0.1"|sort|uniq -c|sort -n |tail -n 10  提取访问量前10位的ip.

cat cookie_log |grep ‘09/Dec/2010:18:01‘|wc –l 检查18:01这一分钟的访问总量。

cat cookie_log|grep ‘HTTP/.../" [4|5]‘|more  查看响应出错的请求。

cat cookie_log |grep -E ‘Googlebot|Baiduspider‘|wc –l统计googlebaike爬虫的访问量。


Linux服务器开发常用的命令以及遇到的问题

标签:

原文地址:http://my.oschina.net/u/1024767/blog/515611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!