扩展编译好用,通过php编码测试报“段错误",如果是c语言都是用gdb进行设置,那php扩展要如何进行调试呢?搜索了下,虽然是php扩展但是core是php 的core不是单个so扩展的coredump
这里使用ulimit -c unlimited来开启core文件,使用gdb来对core文件进行调试演示一下。
阅读全文
方法一:
开始菜单搜索netplwiz;
管理员运行,去掉"要使用本机必须输入密码"的钩
阅读全文
背景:C语言里重新分配及释放结构体会产生一些开销,可能导致巨大的性能瓶颈。解决这个问题的一个办法是为分配的结构体单独维护一个表。当用户不需要某个结构体实例时,将其返回结构体池中。当我们需要某个实例时,从结构体池中获取一个对象。如果池中没有可用的元素,我们就可以动态分配一个实例。这种方法高效地维护一个结构体池,能按需重复使用动态内存。
     一般的malloc实现,对一块已分配的内存,都有两个机器字的簿记,甚至更多。如果不需要排错,理论上讲,只需要一个字长的额外开销,用来记录这块内存的尺寸(放在intptr[-1]处是个好主意)。
为什么需要这个开销呢?因为free传入的只是个指针,它不知道要释放多大的内存,因此free内部必须通过某种方式来获得这块内存的尺寸。
可以想象,如果用 malloc/free 来作为一个关联数组(map)的分配器,要浪费不少内存。不过好在实际数据的尺寸往往比额外消耗要大很多,相比起来,浪费的比例不算很大,况且现在内存还很便宜。
其实,打造一个高效的分配器并不难,难的是它的适用范围(多线程?cell尺寸,chunk尺寸,对齐,排错...),如果可以忍受这些缺陷,或者说是限制,还是比较值得的。下一步就是它的灵活性——让它可以更加容易集成进其它系统。
对于C标准库,如果能增加一个/一族这样的分配器,还是很有价值的。从理论上讲,只要free时多传一个size参数,就可以完全去掉额外的开销。这样两个函数就可以做到:

这样做还有一个额外的好处,就是可以更好地对齐,假定程序需要按32字节对齐,malloc/free 就至少需要32字节做簿记,如果再加上内存越界检测,就需要64字节。salloc/sfree则只需要将分配的内存对齐到32字节边界即可。

但是这对程序的正确性要求很高,malloc/free中,内存越界检测可以很容易实现,而salloc/sfree就完全做不到(除非增加额外簿记)。一个好主意是可以在debug版中加入这些差错功能,而在release版中去掉。

更好(确切地讲应该是更灵活)的方案是,实现一个


而让 salloc/sfree简单地作为 mpool 的包装。

gcc的std::allocator基本上是按这样的方式实现的,只不过,它的size参数,大多数时刻是自动传递的(知道具体的class/struct,也就知道它的尺寸)。实现方式上,使用 size_aligned/align 作为索引去访问特定尺寸的mempool,一个 mempool 是多个链表串起来的大chunk,每个chunk内部是链表穿起来的cell。这也许是最好的实现方式了,除了节省的额外空间开销,时间开销上,如果不考虑加锁,一次alloc平均可以在10时钟周期内完成,dealloc用的时间更短。相比之下malloc/free耗的时间也要多得多。
原文来自:http://blog.csdn.net/whinah/article/details/4693828

如何减少频繁分配内存(malloc或者new)造成的内存碎片?
高性能之内存池(频繁使用malloc和new会降低性能)
内存池(Memory Pool)是一种内存分配方式。 通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。

(1)针对特殊情况,例如需要频繁分配释放固定大小的内存对象时,不需要复杂的分配算法和多线程保护。也不需要维护内存空闲表的额外开销,从而获得较高的性能。
(2)由于开辟一定数量的连续内存空间作为内存池块,因而一定程度上提高了程序局部性,提升了程序性能。
(3)比较容易控制页边界对齐和内存字节对齐,没有内存碎片的问题。
(4)当需要分配管理的内存在100M一下的时候,采用内存池会节省大量的时间,否则会耗费更多的时间。
(5)内存池可以防止更多的内存碎片的产生
(6)更方便于管理内存
转自:http://blog.sina.com.cn/s/blog_6abf2c040101fj3f.html


忘记free内存泄漏怎么办?
linux C内存泄露检测实现及内存泄露检测的一般方法
linux中,由于使用malloc或alloc而没有free掉申请的内存,就会造成内存的泄露。通常,来讲为了避免内存泄露的情况出现,一般要求,我们尽量的malloc之后,调用free。但是总会有忘记free的时候啊。一般可以有如下几种方式来避免内存泄露:

1)  使用智能指针,这个在C++中较为常见;

2)  使用内存池;

3)  自己封装一层malloc/free等等。当申请内存时,将申请信息放入到一个已分配内存信息链表里面。free时,删除对应的信息表的节点。在程序执行结束前,扫瞄该信息表,若还存在信息节点,那么该节点记录的就是泄露的内存信息。若链表为空,那就是说没有发生内存泄露;

4)使用检测工具检测内存泄露,进而修补程序,这样的工具有比如Valgrind等等。

摘录自:http://www.xuebuyuan.com/1764051.html
背景:
一)在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网
,这才是关键。
二)很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问。
阅读全文
背景:Chrome或Firefox下文件后,在文件夹中显示时,会默认选中这个文件,这个功能是怎么实现的呢?
阅读全文
背景:cache有多台,addServer,这块里有一个算法不是太好,在腾讯时在做云存储时有兄弟改成了环形算法,更能最大限度的在添加机器后影响小,这块我目前没几台机器没有这个必要,自己写还不如这位兄弟写的,特转。
阅读全文
即使是RAID多张盘组成高可用,但在Linux下显示也是一块,但有时用df -h看不清楚,得用 fdisk -l 查看:
一)Linux下机械磁盘大小查看之fdisk命令使用方法:
[root@xidan-testserver-428 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol03
                       22G   22G     0 100% /
/dev/mapper/VolGroup00-LogVol00
                       32G  4.4G   26G  15% /usr
/dev/mapper/VolGroup00-LogVol01
                       32G  6.3G   24G  21% /var
/dev/mapper/VolGroup00-LogVol04
                      171G  865M  161G   1% /data
/dev/sda1             244M   20M  212M   9% /boot
tmpfs                 4.0G     0  4.0G   0% /dev/shm
查看总大小:fdisk -l,有299.4G,但是实际分成下面两个区后并没有那么大:
[root@xidan-testserver-428 ~]# fdisk -l
Disk /dev/sda: 299.4 GB, 299439751168 bytes
255 heads, 63 sectors/track, 36404 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          32      257008+  83  Linux
/dev/sda2              33       36404   292158090   8e  Linux LVM
合计大小:
[root@xidan-testserver-428 ~]# expr 22 +  32 + 32 + 171 + 4
261


二)背景:vps出现负载高的情况,有一盘是挂载的,不知是不是因代码放上面运行慢引起的,磁盘不行?

阅读全文
背景:curl "http://jackxiang.com/post/7634/" curl: (52) Empty reply from server,我估计是Nginx的缓存cgi动态为静态的模块可能出了点问题。

今天调试nginx 模块,使用 curl 发http 请求,结果得到这么个错“Empty reply from server”,死活不得其解。

后来,使用gdb调试另外一个东西,还没到断点处就停了,执行下一步,就挂掉了。这时看curl的返回,正是“Empty reply from server”。

ps 发现原来nginx子进程已经没了,换成了新的(如果有子进程挂掉,nginx会启动一个新的)。


就这两个模块:
http://www.grid.net.ru/nginx/upload.en.html
http://labs.frickle.com/nginx_ngx_cache_purge/

顺带升级了一下nginx为1.7.7好像就有上面这个问题,加一个nginx_upload_module模块(编译不过去,后来去了。),重新编译一次nginx,问题依旧:


最终问题从nginx的error里查到:
2014/11/22 14:38:14 [crit] 8855#0: *260 writev() "/usr/local/nginx/fastcgi_temp/9/08/0000000089" failed (28: No space left on device) while reading upstream, client: 27.150.222.72, server: jackxiang.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi.sock:", host: "www.jackxiang.com", referrer: "http://www.jackxiang.com/"
是nginx中fastcgi的一个缓存文件,磁盘满了,我靠,查了好一会喔。

___________________________________________________________
Nginx-1.3.X,Nginx-1.4.X安装nginx_upload_module-2.2.0.tar.gz会有点问题,报

/opt/nginx_upload_module-2.2.0/ngx_http_upload_module.c: In function ‘ngx_http_read_upload_client_request_body’: /opt/nginx_upload_module-2.2.0/ngx_http_upload_module.c:2628: 错误:‘ngx_http_request_body_t’ 没有名为 ‘to_write’ 的成员
../nginx_upload_module-2.2.0/ngx_http_upload_module.c: 在函数‘ngx_http_read_upload_client_request_body’中:
../nginx_upload_module-2.2.0/ngx_http_upload_module.c:2628: 错误:‘ngx_http_request_body_t’没有名为‘to_write’的成员
../nginx_upload_module-2.2.0/ngx_http_upload_module.c:2687: 错误:‘ngx_http_request_body_t’没有名为‘to_write’的成员
../nginx_upload_module-2.2.0/ngx_http_upload_module.c: 在函数‘ngx_http_do_read_upload_client_request_body’中:
../nginx_upload_module-2.2.0/ngx_http_upload_module.c:2769: 错误:‘ngx_http_request_body_t’没有名为‘to_write’的成员
../nginx_upload_module-2.2.0/ngx_http_upload_module.c:2785: 错误:‘ngx_http_request_body_t’没有名为‘to_write’的成员
../nginx_upload_module-2.2.0/ngx_http_upload_module.c:2877: 错误:‘ngx_http_request_body_t’没有名为‘to_write’的成员


选择Nginx-1.2.X的就没问题。


来自:http://gcoder.blogbus.com/logs/44505794.html
背景:今天访问自己博客时偶尔出现如下mysql问题:
Bo-Blog Database System Tips: Can not connect to MySQL server
Time: 2014-11-22 4:56am
Script:
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
Errno.: 2002


找了一下有一位兄弟是这么说的:
刚刚装好的环境,经常会出现Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ 的问题。其实解决这个问题一般有两种解决方法的思路:


其一,就是mysql启动的时候生成的这个mysql.sock文件,而却所在的文件夹的写入权限,所以给这个文件夹足够的权限就好了,至于这个文件夹在哪儿,可以查看/etc/my.cnf就能看到。
vi /etc/my.cnf



其二,就是php没有加载上这个文件。具体做法就是查看php.ini,里面相关联的mysql.sock文件所在的地址是否跟/etc/my.cnf生成的一致。php.ini中:
?
mysql.default_socket=/tmp/mysql.sock

vi php.ini


璞玉的修改成这个了。
如果修改了php.ini,如果是centos,请重启php-fpm,然后重启nginx或者apache即可。
/TMP/MYSQL.SOCK

摘自:http://www.pooy.net/original-solve-the-problem-cant-connect-to-local-mysql-server-through-sockettmpmysql-sock.html
更多:http://www.linuxdiyf.com/bbs/thread-75335-1-1.html
背景:在xp下用IE下载了一个firefox的网络安装程序,下载安装后发现是英文。
好像是更新了一下系统,重启后运行火狐变成了英文,怎么调成中文
1.打开Firefox浏览器,在地址栏输入“about:config”打开
2.点击底部的确认按钮进入
3.在左边第一列找到“general.useragent.locale”这一项,然后双击,把框内内容改为“zh-CN”4.关闭浏览器再打开即可


后来,发现本来就是英文版,设置了没用。还是下载时直接下一个中文的全安装包得了。
这个问题困扰了好久,昨天到网上查了很多资料,介绍了两种办法
1:设置input的height和line-height,line-height比height稍小一些,但这种方式只在IE中生效,FireFox中文字仍然是
    顶部显示的

2:设置input的padding-top,padding-top=(height-line-height)/2,这种方法勉强可以是的文字想居中 位置靠近,但padding-top的值的慢慢的调节,调节了很久发现文字终于居中了,结果文本框的高度也变大了,一个很大的文本框看其来总有点不协调,请问大家是怎么调节<input type="text">使得文字居中的(  vertical-align:middle 也试过,但是没有效果)

3:请问Dreamweaver中有没有专门用于显示文字的标签呢,就像asp.net中的label一样的,在表单中经常会看到  “用户名:”+文本框  ,怎么让“用户名:”和后面的文本框垂直居中呢

欢迎各位高手指导,最好能亲手调试过在回答,能答多少就答多少,言之有理即可得分

阅读全文
开启IO监控:
sysctl vm.block_dump=1
#或
echo 1 >/proc/sys/vm/block_dump
开启后内核会将IO读写dump到日记,用dmesg查看:
dmesg
进程读写block到磁盘dm-0:
mysqld(7822): READ block 78196624 on dm-0
kjournald(529): WRITE block 211136 on dm-0
bash(8336): dirtied inode 7391146 (dmesg) on dm-0
统计当前占用IO最高的10个进程:
dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10

摘处:http://www.haiyun.me/archives/linux-dmesg-io-dump.html
背景:android手机是linux内核的手机,当然linus自己可能发现漏洞,但同时其linux是开源的,代码是公开的,只要能读取其root的一个su的机制,及内核相关权限代码,可能发现各种漏洞,有些漏洞是内核自己的,比如linus作为linux之父亲,自己都提交一个,有些呢是程序调用时需要用root去获取如某些设备权限等,此时会编译原理的大牛就可以在此处作文章了,经过努力是可以实现提权的,再就是利用如linux下多进程的原理:如linux内核会对孤儿进程会用1号进程去收养,恶意创建N多进程后,其adb崩溃重启瞬间没法让1号进程去执行降权,此时adb就是root,这是一个内核和应用程序相结合的提权,总之,提权这种事情都对linux的内核较熟悉,对多进程啊,对哪些地方需要root的代码有研究,也就是黑发生在内部,提权拿钱这种事情,不光linux系统,人类这个大的系统也有类似的情形,叫专政策漏洞,在法律灰色地带干赚钱,法律这套体系已经被他摸透了,已经被root了,法律不健全,或故意不打补丁引起的,所以需要开源、开放、透明,一块打补丁,所谓政策开放、透明、在法制下阳光运行就是这个理儿。
阅读全文
背景:在21ic上看一篇文章说向51单片机say bye bye,有点意思,但是就目前来说新的低成本方案成本低于51的涌现,再就是调试后到硬件的结合程度,再就是对寄存器的操作等都存在问题,于是说bye了,不过目前有新的avr平台如Arduino的出现,不亚于arm下的raspberryPi。也就是说这块来讲人人都能学点皮毛就能开发出一个小硬件功能,但就我的个人感觉呢,这块硬件还是像老中医一样,需要有多年的功力的,不全是像这文章所述一样,精华呢,就像那个周星驰的西游降魔篇中的孙悟空一样,小且有力,有穿透力的,成魔也好成佛也好都得小得有压强,是一个同意的整体,51是你练手摔打的一座小山,come on,呵呵。

阅读全文
背景:想做智能硬件,语音识别成文字,再解析做相关操作是一个重要的点功能,国内就没有一个厂商像google一样提供一个web的协议进行翻译么?能不能更开放点,把这点能力给开放出来,毕竟如果哪家小公司去做这一块成本相当的高,有讯飞一家,还有没有更勇于开放的呢?呵呵,;webchat,只能在微信里用。

阅读全文
磁盘预留空间的实验:

1、首先在要预留空间的分区上使用dd命令生成一个指定大小的文件:

      创建一个10M的文件,名字是foobar:
       # dd if=/dev/zero of=/home/foobar bs=1K count=10000
      In Unix-like operating systems, /dev/zero is a special file that provides as many null characters (ASCII NULL, 0x00; not ASCII character "digit zero", "0", 0x30) as are read from it. One of the typical uses is to provide a character stream for overwriting information. Another might be to generate a clean file of a certain size. Using mmap to map /dev/zero to RAM is the BSD way of implementing shared memory.

2、将这个文件格式化:

      # mke2fs -vFm0 /home/foobar 100000000 //(1K * 10000)
3、将这个文件mount,之后就可以向这个文件中写内容了,就好比向一个目录中写内容一样:

      # mount -o loop home/foobar /mnt/mountpoint
摘自:http://blog.csdn.net/penn902/article/details/5746606
更多:http://blog.chinaunix.net/uid-8504518-id-2030389.html
背景:大文件的断点续传,有时网络波动啥的,需要断点从已经下载位置续传下载文件,对于没有传过的文件再次从开始下载就麻烦了,这块http协议支持的,Apache和Nginx都支持这样的方法实现了从某个部分进行断点下载。
服务器是否支持断点续传的判断:
更多 0
断点续传 linux wget 服务器 curl
通常情况下,Web服务器(如Apache)会默认开启对断点续传的支持。因此,如果直接通过Web服务器来提供文件的下载,可以不必做特别的配置,即可享受到断点续传的好处。断点续传是在发起HTTP请求的时候加入RANGE头来告诉服务器客户端已经下载了多少字节。等所有这些请求都返回之后,再把得到的内容一块一块的拼接起来得到完整的资源。

Resumable download file Web服务器(如Apache)默认开启断点续传

你可以通过以下的命令来测试一下。

Linux 测试服务器是否支持断点续传

localhost [~]# wget -S http://httpd.apache.org/images/httpd_logo_wide_new.png 2>&1 | grep ‘Accept-Ranges’
  Accept-Ranges: bytes

输出结果 Accept-Ranges: bytes ,说明服务器支持按字节下载。

curl 命令发送字节范围下载

curl –range 0-99 http://images.apple.com/home/images/billboard_iphone_hero.jpg

这样可以到最开始99字节,结果如下图:

curl range bytes request curl 命令发送字节范围请求

说明从服务器端按字节范围下载是完全没有问题的。

现在我们尝试以下方式:

1、一次性下载整个图片。

localhost [~]# curl –range 0-98315 http://images.apple.com/home/images/billboard_iphone_hero.jpg > test.jpg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 98316  100 98316    0     0   524k      0 –:–:– –:–:– –:—:—  527k

完成后,test.jpg完全等于billboard_iphone_hero.jpg,文件大小为98,316 字节。

实践如下:我的Nginx服务器,请求下看是否支持,如下:
1)实践下下载这块的header返回头有Accept-Ranges: bytes证明Nginx也是支持断点续传下载的:



(1)Curl包含range的请求头是这样的:

(2)其抓包Nginx的返回头是这样:
HTTP/1.1 206 Partial Content
Server: nginx
Date: Wed, 19 Nov 2014 14:45:07 GMT
Content-Type: image/jpeg
Content-Length: 109
Last-Modified: Fri, 07 Nov 2014 05:06:12 GMT
Connection: keep-alive
ETag: "545c5344-1b8c"
Expires: Fri, 19 Dec 2014 14:45:07 GMT
Cache-Control: max-age=2592000
Content-Range: bytes 0-108/7052


4)通过前面的curl及wget联合起来,先后组合起来实现一个断点下载整个图片,并看其服务器返回头(curl已经下了前面的108,后从109开始wget:
(1)先保存一部分到108:


(2)再通过wget的断点续传下载命令-c,请求剩下的部分(Content-Range: bytes 109-7051/7052):
A)加上-S看返回头, -S,  --server-response         打印服务器响应。:


B)发起头如下,也就是说经curl保存一部分后,wget通过-c参数时,后面它会去读取目前文件大小,后写在http头里去找服务端要,请求头如下:


注意:字节是从0开始,结束字节为总字节长度 减 1。
来自:http://ju.outofmemory.cn/entry/23646
Nginx:http://chenzhenianqing.cn/articles/926.html
阅读全文
分页: 60/272 第一页 上页 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 下页 最后页 [ 显示模式: 摘要 | 列表 ]