[root@ gwan]# file gwan
gwan: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
[root@ gwan]# ldd gwan
not a dynamic executable
[root@ gwan]# du -csh gwan
208K gwan
208K total
gwan如何做到神奇?
作为一个Web服务器,它需要执行套接字编程和许多其他繁重的工作,这些工作都需要与libc链接,但gwan似乎并非如此。怎么可能?
答案 0 :(得分:5)
像往常一样,这并不神奇,GWAN装满了UPX,看起来更小,节省了大约200kB。打开包装结果如下。
> ldd gwan
linux-gate.so.1 => (0xf770c000)
libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf76e9000)
librt.so.1 => /usr/lib32/librt.so.1 (0xf76e0000)
libdl.so.2 => /usr/lib32/libdl.so.2 (0xf76db000)
libm.so.6 => /usr/lib32/libm.so.6 (0xf76b1000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7695000)
libc.so.6 => /usr/lib32/libc.so.6 (0xf752c000)
/lib/ld-linux.so.2 (0xf770d000)
答案 1 :(得分:2)
正如它在file
输出中所说的那样,它是静态链接的 - 即,它将所有相关代码从库中拉出并包含在可执行文件中。它是“硬编码的”。
答案 2 :(得分:2)
Nginx
2.7 MB
足迹G-WAN
< 1 MB
足迹' magic '所在的地方似乎是品味而非理性问题。
答案 3 :(得分:1)
考虑到其他应用程序服务器的足迹 - 大多数只支持一种脚本语言 - 看到G-WAN(150kB)支持C,C ++,Objective-C,肯定有一些“魔力”, D和Java。
G-WAN和Linux 64位OpenJDK / SUN_JVM只需20 mB的RAM, 后加载所有应用程序示例。
他们显然会密切关注内存使用情况,因为启动时会在gwan.log文件中记录内存占用量。