
linux
文章平均质量分 53
zhangge3663
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
haproxy透传用户ip-方法和原理
为了透传用户ip到后端server,proxy机器需要解决两个问题:1.在创建到后端server的套接字时,将用户ip作为套接字的源ip,从而让后端server看到;2.后端server在回包时,能够将目的地为用户ip的回包,返回给proxy机器,而proxy机器能够将该包,从网卡驱动(链路层)收下来,并正确递交给应用层的haproxy进程。为了解决这两个问题,haproxy进程和所在机器需要做三个事情:1.haproxy进程在创建到后端server的tcp套接字时,开启IP_TRANSP转载 2021-01-18 16:33:48 · 664 阅读 · 0 评论 -
深入Lua:元表
元表我觉得Lua最强大的地方在于对象可以设置元表,而元表会影响对象的访问行为。Table的结构有一个metatable成员,userdata类型的结构也有一个metatable成员,这表明Table和userdata对象可以单独设置元表,其他每种类型的元素是共享的。通过情况下,我们只会对Table或Userdata设置元表,其他类型没有办法通过Lua代码设置元表。字符串库默认给string类型设置了一个元表。使得它可以像对象一样调用字符串库的函数,比如"hello":len()设置元表的AP转载 2021-01-12 20:08:04 · 411 阅读 · 0 评论 -
mmap映射区和shm共享内存的区别总结
linux中的两种共享内存。一种是我们的IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储映射I/O(mmap函数)在说mmap之前我们先说一下普通的读写文件的原理,进程调用read或是write后会陷入内核,因为这两个函数都是系统调用,进入系统调用后,内核开始读写文件,假设内核在读取文件,内核首先把文件读入自己的内核空间,读完之后进程在内核回归用户态,内核把读入内核内存的数据再copy进入进程的用户态内存空间。实际上我们同一份文件内容相当于读了两次,先读入内核空间,再从内核空间转载 2020-12-31 15:38:08 · 135 阅读 · 0 评论 -
MappedByteBuffer以及ByteBufer的底层原理
最近在用java中的ByteBuffer,一直不明所以,尤其是对MappedByteBuffer使用的内存映射这个概念云里雾里。于是首先补了物理内存、虚拟内存、页面内存、交换区的知识:小科普——物理内存、页面文件、交换区和虚拟内存...转载 2020-12-04 12:02:46 · 619 阅读 · 0 评论 -
mmap小示例
#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/fcntl.h>#include <errno.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define TRUE.转载 2020-12-04 11:03:49 · 589 阅读 · 0 评论 -
linux 进程通信之 mmap
一,管道PIPE二,FIFO通信三,mmap通信创建内存映射区。#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);int mmap(void *addr, size_t length);函数mmap:打开一个文件,指定一个文件的区域,作为一个区域,映射到内存中,以后就直接操作那个内存,就能够实现进程间的通信。因为是转载 2020-12-04 10:48:03 · 568 阅读 · 0 评论 -
Linux内存管理中的slab分配器
Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的。对于内核中小块连续内存的请求,比如说几个字节或者几百个字节,如果依然分配一个页框来来满足该请求,那么这很明显就是一种浪费,即产生内部碎片(internal fragmentation)为了解决小块内存的分配,Linux内核基于Solaris 2.4中的slab分配算法实现了自己的slab分配器。除此之外,slab分配器另一个主要功能是作为一个高速缓存,它用来存储内核中那些经常分配并释放的对象。1转载 2020-12-03 11:25:00 · 182 阅读 · 0 评论 -
第三十六讲:用好共享内存工具:Slab管理器
刚刚我们谈到nginx不同的worker进程间需要共享信息的时候,需要通过共享内存;我们也谈到了共享内存上可以使用链表或者红黑树这样的数据结构;但是每一个红黑树上有许多节点;每一个节点你需要分配内存去存放;那么怎么样把一整块共享内存切割成一小块给红黑树上的每一个节点使用呢? 下面我们来看下Slab内存分配管理是怎么样应用于共享内存上的;首先我们来看下Slab内存管理是怎么样的一种形式; 它首先会把整块的共享内存分为很多页面;那么每个页面例如4k;会切分为很多slot; 比如32字节是...转载 2020-11-28 11:30:38 · 354 阅读 · 0 评论 -
单独编译安装gd库
我的php是采用源码编译的,先安装 gd 前置库 : freetype ,jpegsrc,libpng。1.freetypewget http://downloads.sourceforge.net/freetype/freetype-2.7.1.tar.bz2tar jxvf freetype-2.7.1.tar.bz2cdfreetype-2.7.1./configure --prefix=/usr/local/freetypemake && make i..转载 2020-11-02 09:49:52 · 570 阅读 · 0 评论 -
php+gd库的源码安装
PHP+GD安装一、下载软件gd-2.0.35.tar.gz http://www.boutell.com/gd/jpegsrc.v6b.tar.gz http://www.ijg.org/libpng-1.2.18.tar.gz http://sourceforge.net/projects/libpng/zlib-1.2.3.tar.gz http://sourceforge...转载 2020-11-02 09:23:33 · 762 阅读 · 0 评论 -
epoll机制:epoll_create、epoll_ctl、epoll_wait、close
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而减低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。epoll的接口转载 2020-10-22 19:25:35 · 229 阅读 · 0 评论 -
shell脚本获取绝对路径
当前脚本全路径echo $(readlink -f "$0")获取绝对路径(不带文件名)echo $(dirname $(readlink -f "$0"))获取文件名(不带路径)echo $(basename $(readlink -f "$0"))转载 2020-10-10 10:09:40 · 544 阅读 · 0 评论 -
yum-errors
[Errno 14] HTTP/HTTPS Error 404[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 403"[Errno 14] Error 60 - It was impossible to connect to the CentOS serversSummaryWhen trying to install or update packages using yum on client...转载 2020-10-09 08:16:21 · 651 阅读 · 0 评论 -
Linux - 查看、修改、更新系统时间(自动同步网络时间)
本文以CentOS为例,演示如何查看、设置系统时间,以及自动从互联网更新系统时间。1,查看系统时间执行date命令可以查看当前系统的时间:2,手动修改系统时间(1)执行如下命令可以设置一个新的系统时间:date -s "20190712 18:30:50"(2) 设置完后还要执行如下命令保存一下设置:hwclock --systohc(3) 当然我们也可以将上面两个操作合二为一:date -s "20190712 18:30:50" &a...转载 2020-09-30 13:09:00 · 1748 阅读 · 0 评论 -
/usr/lib/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
今天想使用光盘yum源安装东西,发现yum突然不好使了,错误如下:/usr/lib/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback在网上看了一些文档解决了。yum报错的主要错误就是因为libcurl.so.4 => /usr/local/lib/libcurl.so.4这个库的问题。所以直接修改链接库:vi /etc/ld.so.conf显示如下内容:in转载 2020-09-28 11:17:51 · 254 阅读 · 0 评论 -
centos7启动与切换图形界面
安装图形界面默认情况下是不会安装图形界面的,所以需要自己手动安装,步骤如下:开启系统,以root身份进入 安装X(X Window System),命令如下: yum groupinstall "X Window System" 3.其中大约有200多个软件,安装完成会出现complete!字样。然后安装图形界面软件,GNOME(GNOME Desktop),命令如下: yum groupinstall "GNOME Desktop" 4.由于这个软件组比第一个...转载 2020-07-30 18:44:20 · 353 阅读 · 0 评论 -
inotify结合select监控目录下文件变动
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <sys/types.h>#include <sys/inotify.h>#include <string.h>#include <sys/select.h>#define EVENT_SIZE ( sizeof (struct inotify_event) )#define .转载 2020-07-07 21:11:04 · 851 阅读 · 0 评论 -
struct结构体和char型数组的相互转化
针对内存连续的结构体,把一整段内存拷贝到char数组对应的内存中。考虑4字节对齐!struct Test{ int a; char b; char c[1024]; unsigned short d;};char *ch = "abcdefghijklmn1234567890";char *chTest = new char[2048];memset(chTest, 0, sizeof(chTest));Test *t1 = new Test;t1.a转载 2020-07-02 11:10:23 · 7850 阅读 · 0 评论 -
ipcs
分析消息队列共享内存和信号量补充说明ipcs命令 用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。语法ipcs(选项)选项-a:显示全部可显示的信息;-q: 显示活动的消息队列信息;-m: 显示活动的共性内存信息;-s: 显示活动的信号量信息。实例ipcs -a----- Shared Memory Segments -------key shmid owner ...转载 2020-07-02 11:05:43 · 285 阅读 · 0 评论 -
结构体自动化转为char数组的实现
结构体自动化转换为char数组这个需求,来自于一个最近开发的一个项目,在项目开发过程中遇到一个小问题,需要将各种结构体拷贝到char数组中,这对于一个简单的结构体来说是很简单的事情,比如下面这个只有整形字段的结构体:struct A{ int a; int b;};char buf[100];A a = {1,2};memcpy(buf, &a, sizeof(A)); 一句memcpy就能将结构体a拷贝到char数组中去了,直接通过memcpy拷...转载 2020-07-02 11:01:55 · 4124 阅读 · 0 评论 -
清理apache共享内存引起的oracle宕机
我的平台是redhat as 3 ,oracle9204.其他应用是apache,resin等。因为以前发现apache运行时间长以后会出现共享内存不足的错误,具体错误信息如下:[Fri Apr 13 06:00:03 2007] [error] shm.create(): error creating shm 2 No such file or directory[Fri Apr 13 06:00:03 2007] [error] shm.create(): error creating s.转载 2020-06-29 15:43:21 · 272 阅读 · 0 评论 -
一次共享内存引起的线上事故分析
一、前言 ipquery是一个用于根据ip查询对应信息(地址、天气等)的php模块,基于共享内存实现,为了做到更新数据时不重启php,我们引入了数据动态加载概念。如下图1设计:(图1) 在调用查询接口时,php进程会首先访问共享内存D,取出存储在D中shmkey,然后再去访问shmkey表示的内容,热加载的过程就是当数据有更新时,重新申请一块共享内存,把数据加载到这块内存中,然后把D中的内容改成New data的shmkey,当IPQuery接口被调用时,如果取出的shmkey跟...转载 2020-06-29 15:36:36 · 564 阅读 · 0 评论 -
进程间的五种通信方式介绍
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点: 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。 它只能用于具有转载 2020-06-29 14:20:05 · 681 阅读 · 0 评论 -
APR分析-共享内存篇
APR分析-共享内存篇共享内存是一种重要的IPC方式。在项目中多次用到共享内存,只是用而并未深入研究。这次趁研究APR代码的机会复习了共享内存的相关资料。APR共享内存封装的源代码的位置在$(APR_HOME)/shmem目录下,本篇blog着重分析unix子目录下的shm.c文件内容,其相应头文件为$(APR_HOME)/include/apr_shm.h。一、共享内存简单小结共享内存是最快的IPC方式,因为一旦这样的共享内存段映射到各个进程的地址空间,这些进程间通过共享内存的数据传递就不转载 2020-06-29 09:58:29 · 641 阅读 · 0 评论 -
一次“内存泄露”引发的血案
2017年末,手Q春节红包项目期间,为保障活动期间服务正常稳定,我对性能不佳的Ark Server进行了改造和重写。重编发布一段时间后,结果发现新发布的Svr的机器内存一直在上涨。如下图示:观察后,第一反应是完了,一定存在内存泄露。花了3、4天时间,使用各种办法进行定位,一无所获。后来无意中在SPP日志中发现了端倪,日志中一直打印tcp socket[%d] user check pkg not ok, but no more memory,看代码逻辑,是收包缓冲区太小,导致调用方不断使用new转载 2020-06-22 14:33:29 · 1976 阅读 · 0 评论 -
malloc申请得到的内存后,再free释放它的时候,操作系统会立即收回那块内存吗?
stackoverflow上的回答:In many malloc/freeimplementations,freedoesnormallynotreturnthememorytotheoperatingsystem(oratleastonlyinrarecases).Thereasonis,thatyouwillgetgapsinyourheapandthusitcanhappen,thatyoujustfinishoff...转载 2020-06-22 10:10:30 · 1076 阅读 · 0 评论 -
遍历Linux kernel的链表时删除元素的方法
内核的链表list_head设计相当巧妙。今天我说一下对list_head链表的遍历时如何删除元素。链表遍历时,如果删除当前元素,一般都会出错的。在由于语言的各种库中的链表都是如此。list_head也一样。如,在java的遍历中删除当前元素,会抛出java.util.ConcurrentModificationException异常。见:<java中如何删除一个集合中的多个元素>http://blog.youkuaiyun.com/shendl/archive/2007/12/28/19999转载 2020-06-19 16:38:07 · 712 阅读 · 0 评论 -
内核链表点滴--list_for_each_safe使用
自己是个初学者,一直在学习国嵌的教程,本来是在本子上做的笔记,今天学习到内核链表了,老师留了个小问题,自己做了一下,算是写下自己的心得吧.大牛们一定不要见笑...源程序如下:#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/list.h>MODULE_LI转载 2020-06-19 16:16:31 · 3229 阅读 · 1 评论 -
解决类似/usr/lib64/libstdc++.so.6:version `GLIBCXX_3.4.21` not found的问题
源码编译升级安装了gcc后,编译程序或运行其他程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21` not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。1. 问题原因分析为了安装最新版本的Node.js(最新版本的Node.js使用了C++ 11中,而C++ 11需要code>gcc 4.8+才能支持),将gcc升级到了当转载 2020-06-04 08:51:45 · 5507 阅读 · 0 评论 -
内核探测工具systemtap简介
systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法。什么是systemtap假如现在有这么一个需求:需要获取正在运行的Linux系统的信息,如我想知道系统什么时候发生系统调用,发生的是什么系统调用等这些信息,有什么解决方案呢?最原始的方法是,找到内核系统调用的代码,加上我们需要获得信息的代码、重新编译内核、安装、选择我们新编译的内核重启。这种做法对于内核开发人员简直是梦魇,因为一遍做下来至少得需要1个多小时,不仅破坏了原转载 2020-06-04 07:55:56 · 265 阅读 · 0 评论 -
C语言中的rand()函数
rand函数,C语言中用来产生一个随机数的函数。rand函数界限:stdlib.h头文件中有宏#define RAND_MAX 0x7fff rand产生一个0-0x7fff的随机数,即最大是32767的一个数rand函数原型#include <stdlib.h>int rand(void);rand函数调用rand()函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果有那么它会自...转载 2020-05-21 12:17:21 · 1255 阅读 · 0 评论 -
libxml2中文支持
LibXML2自身已经支持了中文编码,只是他的所有api处理的数据都是UTF-8类型的,所以只要在读入和写入数据时进行相应装换即可!代码1是使用Linux下C API进行编码转换;代码2因为libxml2已经融合了iconv,使用了libxml2的函数来进行编码转换。/*compile: gcc -l/usr/include/libxml2 -lxml2 iconv.cinput: test.xml <?xml version="1.0" encoding..转载 2020-05-18 10:16:51 · 454 阅读 · 0 评论 -
C中计算程序运行时间差(毫秒级)
最近在跑一些程序,需要计算程序运行的时间,然后搜索了一下相关的材料,发现下面的一个比较好的方法,可以实现毫秒级的计时:#include <sys/timeb.h>#if defined(WIN32)# define TIMEB _timeb#define ftime _ftime#else#define TIMEB timeb#endiftime_t ltime...转载 2020-05-02 16:39:31 · 2184 阅读 · 0 评论 -
-Bsymbolic:优先使用本地符号
问题描述前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序的A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。 于是我尝试着,将A中的变量名称改为B,这样问题也就没有了~~~原因应用程序进行链接的时候,动...转载 2020-02-27 15:17:22 · 562 阅读 · 0 评论 -
Linux和Windows下使用printf的差别
【1.Linux系统下】一般而言,大家都知道printf是带有行缓冲的函数,printf把打印的消息先输出到行缓冲区,在以下几种情况下:1.程序结束时调用exit(0)/return;2.遇到回车\n,3.调用fflush函数;4.缓冲区满。会自动刷新缓冲区,缓冲区的内容显示到标准输出上。比如在LINUX系统下,执行如下程序:#include <stdio.h>int m...转载 2020-02-20 14:59:16 · 1017 阅读 · 1 评论 -
【C语言】时间操作,把1970年开始秒数计算的时间,转换为字符串格式输出
struct tm *ptr;time_t lt;unsigned int times = <秒数时间变量>;char str[80];lt = times;ptr = localtime(<);strftime(str, 100, "%F %X", ptr);转载 2020-01-06 20:20:17 · 1623 阅读 · 0 评论 -
c库函数tmpfile
描述C库函数FILE *tmpfile(void)以二进制更新模式(wb+)创建临时文件。被创建的临时文件会在流关闭的时候或者在程序终止的时候自动删除。声明下面是tmpfile()函数的声明。FILE *tmpfile(void)参数:NA返回值如果成功,该函数返回一个指向被创建的临时文件的流指针。如果文件未被创建,则返回NULL。实例下面的示例演示了tmp...转载 2019-12-23 13:54:06 · 437 阅读 · 0 评论 -
nginx服务器的文件大小的限制解决方法
1、nginx服务器的解决办法修改nginx.conf的值就可以解决了将以下代码粘贴到nginx.conf内client_max_body_size 20M可以选择在http{}中设置:client_max_body_size 20m;也可以选择在server{}中设置:client_max_body_size 20m;还可以选择在location{}中设置:clien...转载 2019-12-19 17:32:52 · 3184 阅读 · 1 评论 -
linux--GD库安装
我先启动CentOS5.1 Linux可以说如果要配置一台LAMP服务器,都离不开安装gd库,就算自己php开发不涉及到图形方面,但是如果使用其他一些php开发的工具也会涉及到。我安装的环境是使用 CentOS5.1 Linux 操作系统.简单介绍一下gd库:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片...转载 2019-10-31 16:56:32 · 880 阅读 · 0 评论 -
LINUX ltrace命令-用来跟踪进程调用库函数的情况学习
参考链接:http://www.bluestep.cc/linux-ltrace%E5%91%BD%E4%BB%A4-%E7%94%A8%E6%9D%A5%E8%B7%9F%E8%B8%AA%E8%BF%9B%E7%A8%8B%E8%B0%83%E7%94%A8%E5%BA%93%E5%87%BD%E6%95%B0%E7%9A%84%E6%83%85%E5%86%B5/ltrace命令是用...转载 2018-10-11 11:44:49 · 699 阅读 · 0 评论