2
[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

关羽是如何施展魔法的?

作为一个 web 服务器,它需要做 socket 编程和许多其他繁重的工作,这些工作都需要与 libc 链接,但 gwan 似乎不是这样。这怎么可能?

4

4 回答 4

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)
于 2011-10-11T12:59:51.563 回答
2

正如它在file输出中所说,它是静态链接的——即,它具有从库中提取的所有相关代码并包含在可执行文件中。它是“硬编码”的。

于 2011-07-14T12:39:24.053 回答
2

Nginx

  • 0 原生脚本语言生成动态内容
  • 没有扩展的原生 API
  • 2.7 MB脚印

广域网

  • 5种原生脚本语言生成动态内容
  • 丰富的原生 API(JSON、GIF I/O、KV 存储、2D 帧缓冲区原语、图表、电子邮件、压缩、加密等)
  • < 1 MB脚印

魔力”所在的地方似乎是品味问题,而不是理性问题。

于 2012-07-18T08:14:46.150 回答
1

考虑到其他应用服务器的足迹——它们中的大多数只支持一种脚本语言——看到支持 C、C++、Objective-C、D 和 Java 的 G-WAN (150kB) 肯定有一些“魔力”。

在加载所有应用程序示例,G-WAN 和 Linux 64 位 OpenJDK / SUN_JVM 仅占用 20 mB 的 RAM 。

他们显然密切关注内存使用情况,因为内存占用量在启动时记录在 gwan.log 文件中。

于 2012-03-15T06:26:38.097 回答