Linux
文章平均质量分 75
swartz_lubel
这个作者很懒,什么都没留下…
展开
-
TCP连接的状态详解以及故障排查
我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容)1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lsof -i:port 可以检测到打开套接字的状况3)、 sar -n SOCK 查看tcp创建的连接数4)、tcpdump -ian转载 2017-02-25 20:04:30 · 829 阅读 · 0 评论 -
linux fcntl
功能描述:根据文件描述词来操作文件的特性。文件控制函数 fcntl -- file control头文件:#include #include 函数原型: int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg); int fcntl(int转载 2017-02-25 19:46:05 · 232 阅读 · 0 评论 -
socket阻塞与非阻塞,同步与异步
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步转载 2017-02-25 18:32:05 · 298 阅读 · 0 评论 -
IP地址的三种表示格式及在Socket编程中的应用
使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理。IP地址其实有三种不同的表示格式: 1)Ascii(网络点分字符串)- 2) 网络地址(32位无符号整形,网络字节序,大头) 3)主机地址 (主机字节序) IP地址是IP网络中数据传输的依据,它标识了IP网络中的一个连接,一台主机可以有多个IP地址,I转载 2017-02-25 18:30:11 · 1000 阅读 · 0 评论 -
Linux的SOCKET编程详解
Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX转载 2017-02-25 18:10:50 · 408 阅读 · 0 评论 -
Linux Socket Select说明
1、API详解(1)int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); 确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一原创 2017-02-21 19:15:41 · 363 阅读 · 0 评论 -
Linux Socket poll
poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。#include int poll(struct pollfd fd[], nfds_t nfds, int timeout);参数:1)第一个参数:一个结构数组,struct pollfd结构如下: struct pollfd{ int fd; //文件描述符原创 2017-02-21 19:26:23 · 634 阅读 · 0 评论 -
linux socket epoll
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epoll的转载 2017-02-25 20:24:24 · 719 阅读 · 0 评论 -
linux C++实现ftp客户端
#ifndef CLIENT_H_#define CLIENT_H_#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INV原创 2017-02-25 20:30:19 · 9269 阅读 · 3 评论 -
Linux Dynamic Shared Library && LD Linker
目录1. 动态链接的意义2. 地址无关代码: PIC3. 延迟版定(PLT Procedure Linkage Table)4. 动态链接相关结构5. 动态链接的步骤和实现6. Linux动态链接器实现7. 显式运行时链接8. 共享库系统路径 && 默认加载顺序 1. 动态链接的意义1. 静态链接对内存和磁盘的浪费很严重,在静态链接中,C语言静态库是很典型的占用空间...转载 2018-02-28 15:02:34 · 302 阅读 · 0 评论 -
数据链路层学习之LLDP
一、LLDP协议概述 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加自己特有的功能,这就导致在一个网络中往往会有很多具有不同特性的、来自不同厂商的设备,为了方便对这样的网络进行管理,就需要使得不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息。 LLDP(Link Layer Discovery Protocol,链路层发现协议)就是...转载 2018-02-28 14:05:27 · 910 阅读 · 0 评论 -
100万并发连接服务器笔记之处理端口数量受限问题
第二个遇到的问题:端口数量受限一般来说,单独对外提供请求的服务不用考虑端口数量问题,监听某一个端口即可。但是向提供代理服务器,就不得不考虑端口数量受限问题了。当前的1M并发连接测试,也需要在客户端突破6万可用端口的限制。单机端口上限为65536端口为16进制,那么2的16次方值为65536,在linux系统里面,1024以下端口都是超级管理员用户(如root)才可以使用,普转载 2018-01-25 09:24:02 · 678 阅读 · 0 评论 -
100万并发连接服务器笔记之1M并发连接目标达成
第四个遇到的问题:tcp_mem在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来。 通过查看dmesg命令查看,发现大量TCP: too many of orphaned sockets错误,也很正常,下面到了需要调整tcp socket参数的时候了。第一个需要调整的是tcp_rmem,即TCP读取缓冲区,单位为字节,查看默认值cat /proc/s转载 2018-01-25 09:22:23 · 406 阅读 · 0 评论 -
100万并发连接服务器笔记之测试端就绪
重新编写测试端程序测试端程序需要增加绑定本机IP和本地端口的功能,以尽可能的向外发出更多的tcp请求。需要对client1.c重构,增加参数传递。 下面是client2.c的代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849转载 2018-01-25 09:20:42 · 291 阅读 · 0 评论 -
Linux 下的Core Dump
相信大家都有过在linux 下变成出现core dump或者Segment fault的情况,有的时候这种崩溃情况不一定每次都出现,复现有一定的难度,那样我们可以查看的就只有coredump文件了。接下来要说的就是如何设置coredump以及调试corddump文件。一般情况下,linux(目前我用的是centos 6.7)默认是不开启coredump的。[root@local原创 2015-12-12 00:23:07 · 502 阅读 · 0 评论 -
Notepad++中Windows,Unix,Mac三种格式之间的转换
Notepad++中Windows,Unix,Mac三种格式之间的转换由于历史原因,导致Windows,Unix/Linux,Mac三者之间,对于文件中所用回车换行符,表示的方法,都不一样。这就导致了很多人都会遇到回车换行符的困惑,和需要在不同格式间进行转换。其中,关于回车换行符的详细解释,去看这里[13] 此处,介绍一下,如何通过Notepad++实现在这三者之间进行转换。转载 2017-02-26 13:00:28 · 1403 阅读 · 0 评论 -
Linux iostat监测IO状态
Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。1. 基本使用$iostat -d -k 1 10参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。转载 2017-03-08 10:43:06 · 225 阅读 · 0 评论 -
linux libtool简单使用
一、 libtool介绍GNU Libtool 可以容易的在不同的系统中建立动态链接库。它通过一个称为 Libtool 库的抽象,隐藏了不同系统之间的差异,给开发人员提供了一致的的接口。二、 libtool编译1. 网站上下载libtool的源码包2. 解压源码包之后,进入包目录,执行以下命令./configure --prefix=/原创 2017-02-24 11:04:45 · 4685 阅读 · 0 评论 -
linux elf文件格式
一、ELF文件格式概述1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西、以及都以什么样的格式去放这些东西。二、分析一个ELF文件以一个最简单的helloworld程序为例1. ELF文件头使用工具查看ELF文件头:readelf -h obj 在/usr/include/elf.h中可以找到文件头结构定义: 大小总共为64字转载 2017-02-24 10:15:48 · 688 阅读 · 0 评论 -
linux df du命令
df用于检查文件系统磁盘占用情况,du检查磁盘空间占用情况!df 的样例输出 :[root@linux-world ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/vg00-root 17003304 804668 15311852 5% /devtmp原创 2017-02-23 09:11:24 · 428 阅读 · 0 评论 -
linux ldd 查看依赖的库文件
[root@localhost testProgs]# ldd openRTSPlinux-vdso.so.1 => (0x00007ffd48294000)libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003f77000000)libm.so.6 => /lib64/libm.so.6 (0x0000003f6c400000)li原创 2017-02-22 23:42:27 · 1620 阅读 · 0 评论 -
linux free命令
解释一下Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:FO[2][1] = 24677460FO[3][2] = 10321516原创 2017-02-22 23:25:56 · 203 阅读 · 0 评论 -
linux下的setenv使用
今天遇到一个setenv的问题,本来想用gdb去查看的,可是后来找了半天并木有找到,但是还是有一点收获的,记录一下。获取环境变量: #include char *getenv(const char *name);设置环境变量 :setenv和putenv #include int setenv(const char *name, co原创 2015-12-16 01:25:51 · 8483 阅读 · 0 评论 -
linux 获取本机的所有IP地址
linux下获取本地的ip地址,我这里只介绍一种,亲测有效,包括你虚拟出来的IP地址也可以显示出来。先说一下可能大家都有听过的使用 gethostname 函数和 gethostbyname 函数获得本机的IP地址,其实获得的是127.0.0.1,是一个回环的地址。而不是真正的本机IP地址。示例代码: struct hostent *ent; gethostname(host_n原创 2015-12-27 22:10:23 · 2279 阅读 · 0 评论 -
linux 下脚本查看带宽 (不需要安装其他工具包)
因为平时常用的都是iftop去查看网卡的带宽,因为有相对的可视化界面。可是平时去其他的centos上查看流量的话,对方的电脑不一定会安装iftop,这样的话会带来一定的麻烦,所以去网上找了一下traffic.sh 利用脚本去检测实时带宽。#!/bin/bashPATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin;原创 2015-12-13 23:36:49 · 1435 阅读 · 0 评论 -
linux 下进程和线程指定CPU运行
大概的介绍一下linux 的指定CPU运行,包括进程和线程,这个只是最基本的方法,看一下基本就会了,至于其他的进程间通信和线程同步的话,这里暂不做任何介绍。算了,还是比较整体的介绍一下如何去学习这个吧。linux下的top命令是可以查看当前的cpu的运行状态,具体参数自己去查,这里只介绍与标题相关的,按1可以查看系统有多少个CPU,以及每个CPU的运行状态。可是如何查看线程的CPU呢???原创 2015-12-27 22:35:40 · 2772 阅读 · 0 评论 -
linux top命令
简介top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该原创 2017-02-23 09:35:06 · 403 阅读 · 0 评论 -
linux ps pstree pstack命令
相关的常用命令其实就下面的这几个:通过命令名字查找进程pid: ps -ef | grep xxx查找进程的启动时间和出席时间: ps -eo pid,lstart,etime,args|grep java查看当前运行程序的环境变量(可以查看程序的动态链接): ps e -p pid查看进程有多少个线程:pstree -p pid (pstree -p pid |wc -l 可以查原创 2017-02-23 11:21:44 · 624 阅读 · 0 评论 -
Linux下动态库(.so)和静态库(.a)
linux下有两种库:动态库和静态库(共享库)二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。静态库和动态库的最大区别,静态情况下,把库直接转载 2017-02-23 19:51:34 · 751 阅读 · 0 评论 -
vim 中Ctags的安装和使用
这两天看到网上有将vim 改造成功能强大的IDE的blog,突然心血来潮,亲身经历了一下。网友的帖子都不错,我这里只是将各种插件分开罗列,然后加上一些使用技巧。希望本文对你有所帮助!『插件介绍』Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。比如,ta转载 2017-02-23 19:49:05 · 1070 阅读 · 0 评论 -
linux gcc g++编译命令选项
gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] [参数详解] -c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件原创 2017-02-23 19:37:23 · 3647 阅读 · 0 评论 -
linux addr2line
在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,原创 2017-02-23 19:21:56 · 366 阅读 · 0 评论 -
linux ethtool命令
命令描述:ethtool 是用于查询及设置网卡参数的命令。 使用概要:ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等ethtool –h //显示ethtool的命令帮助(help)ethtool –i ethX //查询ethX网口的相关信息 ethtool –d eth原创 2017-02-23 19:20:07 · 395 阅读 · 0 评论 -
linux lsof命令
简介lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口原创 2017-02-23 19:06:27 · 247 阅读 · 0 评论 -
linux nm 和ar命令
只介绍一下常用的命令ar常用命令显示静态库包含的.o文件:显示所有对象文件(.o文件)的列表 (加v可以显示更多的信息) # ar t libtest.a libtest1.o libtest2.o把.o文件打包成一个库文件ar -rv libname.a objfile1.o objfile2.o ... nm常用命令查看动态库里面的导出函数nm -D li原创 2017-02-23 18:13:03 · 323 阅读 · 0 评论 -
linux ipconfig和route 命令
使用ifconfig命令语法格式:ifconfig :不加任何选项表示只显示接口为up状态的接口信息Ifconfig -a:表示显示所有接口的接口信息,不管该接口是up还是down都显示Ifconfig interface [ip/netmask] [up|down]表示为该接口配置ip和掩码,并启动或关闭该接口使用route命令[root@原创 2017-02-23 13:52:59 · 818 阅读 · 0 评论 -
TCP 协议状态解析
我们讲述的都是一些基本的tcp状态,就是使用netstat可以观察到的状态,记录一下,以便出现问题的时候一个思路。先大概叙述一下三次握手和四次握手的机制。1、建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器。 (2)服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表原创 2015-12-10 23:32:37 · 451 阅读 · 0 评论