[转]PHP扩展如何用gdb进行调试
Php/Js/Shell/Go jackxiang 2014-12-5 14:36
扩展编译好用,通过php编码测试报“段错误",如果是c语言都是用gdb进行设置,那php扩展要如何进行调试呢?搜索了下,虽然是php扩展但是core是php 的core不是单个so扩展的coredump
这里使用ulimit -c unlimited来开启core文件,使用gdb来对core文件进行调试演示一下。
阅读全文
这里使用ulimit -c unlimited来开启core文件,使用gdb来对core文件进行调试演示一下。
阅读全文
[转]malloc/free 的开销,如何去掉这种开销?忘记free内存泄漏怎么办?
Unix/LinuxC技术 jackxiang 2014-12-4 00:16
背景: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
一般的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访问网站,而是域名访问。
阅读全文
一)在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网
,这才是关键。
二)很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问。
阅读全文
背景:Chrome或Firefox下文件后,在文件夹中显示时,会默认选中这个文件,这个功能是怎么实现的呢?
阅读全文
阅读全文
[缓存集群]php memcached缓存集群--转
Php/Js/Shell/Go jackxiang 2014-12-1 14:50
背景: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出现负载高的情况,有一盘是挂载的,不知是不是因代码放上面运行慢引起的,磁盘不行?
阅读全文
一)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
今天调试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
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.打开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一样的,在表单中经常会看到 “用户名:”+文本框 ,怎么让“用户名:”和后面的文本框垂直居中呢
欢迎各位高手指导,最好能亲手调试过在回答,能答多少就答多少,言之有理即可得分
阅读全文
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一样的,在表单中经常会看到 “用户名:”+文本框 ,怎么让“用户名:”和后面的文本框垂直居中呢
欢迎各位高手指导,最好能亲手调试过在回答,能答多少就答多少,言之有理即可得分
阅读全文
Linux服务器查看占用IO较高的程序
Unix/LinuxC技术 jackxiang 2014-11-22 12:01
开启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
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手机一键Root原理分析,如何获取到root的原理分析。
Unix/LinuxC技术 jackxiang 2014-11-21 17:50
背景: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,只能在微信里用。
阅读全文
阅读全文
Linux操作系统下生成一个指定大小的文件
Unix/LinuxC技术 jackxiang 2014-11-19 17:56
磁盘预留空间的实验:
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
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
[实践OK]Web服务器(如Apache、Nginx)会默认开启对断点续传的支持,php支持断点续传的文件下载类,PHP上传实现断点续传文件的方法。
Php/Js/Shell/Go jackxiang 2014-11-19 17:05
背景:大文件的断点续传,有时网络波动啥的,需要断点从已经下载位置续传下载文件,对于没有传过的文件再次从开始下载就麻烦了,这块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
阅读全文
服务器是否支持断点续传的判断:
更多 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
阅读全文