![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 74
AdolphLua
这个作者很懒,什么都没留下…
展开
-
UDP协议进阶
UDP协议什么时候UDP比TCP通信更好?1. UDP协议有更加好的通讯速度2. 在一问一答的情况之下,包的次序无关 =>DNS3. 在网络状况不好情况之下,短连接可能比长连接有更好的体验,一问一答式的小数据量通讯,正是 TCP 的弱项我的思考:在UDP上实现一个带超时的请求回应机制,让业务层负责超时重发,可能比TCP效果更好,前提:单个请求或回应的包不应该过大,最好不要超过一个MTU,大概在原创 2016-08-02 11:44:50 · 469 阅读 · 0 评论 -
sar 找出系统瓶颈的利器
12. sar 找出系统瓶颈的利器sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行转载 2016-05-10 00:21:19 · 234 阅读 · 0 评论 -
ldd 查看程序依赖库
2. ldd 查看程序依赖库ldd作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。示例:查看test程序运行所依赖的库:/opt/app/todeav1/test$ldd testlibstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)libm.so.6 => /转载 2016-05-10 00:19:32 · 443 阅读 · 0 评论 -
gdb 调试利器
1. gdb 调试利器GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c++程序员,gdb是必不可少的工具;1.1. 启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++ -g hello.cpp -o hello调试可执行文件:$gdb转载 2016-05-10 00:17:58 · 201 阅读 · 0 评论 -
ipcs 查询进程间通信状态
ipcs 查询进程间通信状态ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员非常有用,普通的系统管理员一般用不到此指令。IPC资源查询查看系统使用的IPC资源$ipcs------ Shared Memory Segments --------key shmid owner转载 2016-05-10 00:15:35 · 580 阅读 · 0 评论 -
Linux系统调用--getrlimit()与setrlimit()函数详解
功能描述:获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。用法:#include int getrlimit(int resource, str转载 2016-05-19 18:34:20 · 242 阅读 · 0 评论 -
共享内存的常用函数原理剖析
共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中都有相同转载 2016-05-07 16:26:25 · 377 阅读 · 0 评论 -
剖析共享内存
共享内存共享内存可以被描述成内存一个区域(段)的映射,这个区域可以被更多的进程所共享。这是IPC机制中最快的一种形式,因为它不需要中间环节,而是把信息直接从一个内存段映射到调用进程的地址空间。 一个段可以直接由一个进程创建,随后,可以有任意多的进程对其读和写。但是,一旦内存被共享之后,对共享内存的访问同步需要由其他 IPC 机制,例如信号量来实现。象所有的System V IPC 对象一样,L转载 2016-05-07 16:11:34 · 212 阅读 · 0 评论 -
服务器TIME_WAIT和CLOSE_WAIT详解
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.csdn.net/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。 在服务器的日常维护过程中,会经常用到下面的命令:netstat -n | aw转载 2016-05-07 15:36:34 · 231 阅读 · 0 评论 -
Linux无锁编程
__sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetch_and_add,顾名思义,现fetch,然后自加,返回的是自加以前的值。以count=4为例,调用__sync_fetch_and_add(&count,1),之后,返回值是4,然后,count变成了5. 有__sync_fetch_and_add,自然也原创 2016-05-22 22:03:03 · 347 阅读 · 0 评论 -
select和epoll的性能差别
select和epoll的性能差别select原理概述调用select时,会发生以下事情:1. 从用户空间拷贝fd_set到内核空间;2. 注册回调函数__pollwait;3. 遍历所有fd,对全部指定设备做一次poll(这里的poll是一个文件操作,它有两个参数,一个是文件fd本身,一个是当设备尚未就绪时调用的回调函数__pollwait, 这个函数把设备自己特有的等待队列传给内核,原创 2016-08-01 21:40:57 · 2957 阅读 · 1 评论 -
socket编程原理
1、问题的引入1) 普通的I/O操作过程:UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”转载 2016-07-02 19:41:37 · 1233 阅读 · 0 评论 -
从IP地址的扩展
参考文章:http://blog.csdn.net/hguisu/article/details/7449955使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理。IP地址其实有三种不同的表示格式: 1)Ascii(网络点分字符串)- 2) 网络地址(32位无符号整形,网络字节序,大头) 3)主机地址 (主机字节序原创 2016-07-02 19:28:58 · 1835 阅读 · 0 评论 -
TCP的超时与重传
1.前言对每个连接, TCP管理4个不同的定时器。1.重传定时器适用于当希望收到另一端的确认。2.坚持(persist)定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。3.保活(keepalive)定时器可检测到一个空闲连接的另一端何时崩溃或重启。4.2MSL定时器测量一个连接处于TIME_WAIT状态的时间。超时重传是TCP协议保证数据可靠性的一个重要机制,转载 2016-07-02 17:10:30 · 2389 阅读 · 0 评论 -
Memcached内存管理slabclass
memcached使用了一个叫slab的内存分配方法,有关slab的介绍可以参考链接1和链接2。可以简单地把它看作内存池。memcached内存池分配的内存块大小是固定的。虽然是固定大小,但memcached的能分配的内存大小(尺寸)也是有很多种规格的。原创 2016-07-14 00:30:39 · 2711 阅读 · 0 评论 -
Lighttpd源码分析之状态机与插件
Lighttpd启动时完成了一系列初始化操作后,就进入了一个包含11个状态的有限状态机中。每个连接都是一个connection实例(con),状态的切换取决于con->state。lighttpd经过初步处理后将con的基本信息初始化,而插件对事件的处理就是针对con进行的,它拿到con后按照业务需要进行相应处理,然后再交还给lighttpd,lighttpd根据con中的信息完成响应。转载 2016-07-02 12:23:08 · 1602 阅读 · 0 评论 -
linux c/c++ 后台开发常用组件之:c++日志模块
版权声明:本文为博主原创文章,未经博主允许不得转载。日志是服务端开发必不可少的模块,工作过几个公司,基本每个公司或者项目组都有自己的日志模块,有使用开源的,也有自己写的,这是自己写的一个日志模块,经过线上大并发的测试,性能良好,使用也较方便。该日志采用的是单例模式,支持自动按天分文件,按日志行数自动分文件,是多线程安全的单例模式,没有外部依赖,linux操作系统均可以使用。在日志安全级别高转载 2016-05-06 20:46:44 · 684 阅读 · 0 评论 -
高性能阻塞队列
版权声明:本文为博主原创文章,未经博主允许不得转载。阻塞队列是后台开发中多线程异步架构的基本数据结构,像Python,Java 都提供线程安全的阻塞队列,c++ 可能需要自己实现一个模板。从性能考虑,自己没有使用STL的queue作为基本数据结构,而是使用循环数组作为基本数据结构,性能应该比queue高,省去了动态内存分配和回收。确点就是,队列大小不可动态扩展,当时实际开发转载 2016-05-06 20:27:41 · 491 阅读 · 0 评论 -
linux 下的编程效率分享
操作性能memset 1K150W次/smemcpy 1K150W次/smalloc 小字节 单线程100W次/sgettimeofday30W~400W次/stime30W~400W次/sgetpid转载 2016-05-06 19:29:21 · 222 阅读 · 0 评论 -
lsof 一切皆文件
lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。lsof打开的文件可以是:普通文件目录网络文件转载 2016-05-10 17:50:36 · 261 阅读 · 0 评论 -
strace 跟踪进程中的系统调用
strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。6.1. 输出参数含义每一行都是一条系统调用,等号左边是系统调用的函数名及其参数转载 2016-05-10 17:48:22 · 252 阅读 · 0 评论 -
top linux下的任务管理器
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排转载 2016-05-10 17:47:02 · 272 阅读 · 0 评论 -
nm 目标文件格式分析
nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。 nm 命令缺省情况下报告十进制符号表示法下的数字值。$nm myProgrammer08049f28 d _DYNAMIC08049ff4 d _GLOBAL_OFFSET_TABLE_080484dc R _IO_转载 2016-05-10 17:38:18 · 1653 阅读 · 0 评论 -
size 查看程序内存映像大小
作用:查看程序被映射到内存中的映像所占用的大小信息。程序映射到内存中,从低地址到高地址依次为下列段:代码段: 只读,可共享; 代码段(code segment/text segment )通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,转载 2016-05-10 17:36:45 · 691 阅读 · 0 评论 -
scp 跨机远程拷贝
18. scp 跨机远程拷贝scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。注解类似的工具有rsync;scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及转载 2016-05-10 17:34:04 · 785 阅读 · 0 评论 -
crontab 定时任务
19. crontab 定时任务通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。19.1. 命令格式crontab [-u user] [ -e | -l | -r ]19.2. 命令参数-u use转载 2016-05-10 17:33:13 · 258 阅读 · 0 评论 -
linux 性能优化
性能优化的核心是找出系统的瓶颈点,问题找到了,优化的工作也就完成了大半;这里介绍的性能优化主要从两个层面来介绍:系统层面和程序层面;分析系统瓶颈系统响应变慢,首先得定位大致的问题出在哪里,是IO瓶颈、CPU瓶颈、内存瓶颈还是程序导致的系统问题;使用top工具能够比较全面的查看我们关注的点:$top top - 09:14:56 up 264 days, 20:5转载 2016-05-10 17:54:16 · 576 阅读 · 0 评论 -
文本处理
本节将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和参数都是常用的;我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;如果有更为复杂的任务需求,还是考虑python吧;find 文件查找查找txt和pdf文件:find . \( -name "转载 2016-05-10 18:02:05 · 459 阅读 · 0 评论 -
动态库的链接和链接选项-L,-rpath-link,-rpath
链接动态库如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可转载 2016-05-06 19:23:22 · 249 阅读 · 0 评论 -
跟我一起学习VIM - The Life Changing Editor
前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程。虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是对我多年来使用VIM的最大鼓舞吧。所以分享结束之后,将这篇简短教程整理一下作为我2014年的第一篇Blog。转自:http://feihu.me/blog/2014/intr-to-vim/搭完网站之后的第一篇文章有些兴奋,先变转载 2016-05-28 22:50:43 · 444 阅读 · 0 评论 -
使用 getopt() 进行命令行处理
轻松处理复杂命令行所有 UNIX® 程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。不过很多开发人员都将其宝贵的时间花在了编写自己的命令行解析器,却不使用getopt(),而后者是一个专门设转载 2016-05-11 16:59:03 · 221 阅读 · 0 评论 -
多线程服务器的适用场合
与前文相同,本文的“进程”指的是 fork() 系统调用的产物。“线程”指的是 pthread_create() 的产物,而且我指的 pthreads 是 NPTL 的,每个线程由 clone() 产生,对应一个内核的 task_struct。本文所用的开发语言是 C++,运行环境为 Linux。首先,一个由多台机器组成的分布式系统必然是多进程的(字面意义上),因为进程不能跨 OS 边界。在这转载 2016-05-11 01:11:05 · 237 阅读 · 0 评论 -
shell脚本--if判断(数字条件、字符串条件)
二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.1.整数比较 [cpp] view plaincopy-eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b" ] -gt 大于,如:if [ "$a" -gt "$b" ] -ge 大于等于,如:if [ "$a" -ge转载 2016-05-11 00:56:12 · 938 阅读 · 0 评论 -
segment fault
Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。 1. 段错误是什转载 2016-04-16 00:58:01 · 588 阅读 · 0 评论 -
Linux中的线程局部存储(一)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/26469435 在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得转载 2016-05-10 21:40:17 · 276 阅读 · 0 评论 -
Linux 内核的同步机制
本系列文章分两部分,第一部分详细地介绍了 Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例。第二部分将详细介绍在Linux内核中的另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU和顺序锁。杨 燚 (yang.yi@bmrtech.com), 计算机科学硕士一、 引言在现代操作系统里,同一时间可能有多个内核执转载 2016-05-10 18:39:58 · 284 阅读 · 0 评论 -
iostat 监视I/O子系统
11. iostat 监视I/O子系统iostat是I/O statistics(输入/输出统计)的缩写,用来动态监视系统的磁盘操作活动。11.1. 命令格式iostat[参数][时间][次数]11.2. 命令功能通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。11.3. 命令参数-C 显示C转载 2016-05-10 17:29:49 · 197 阅读 · 0 评论