조아라에서 소설 볼 때 파이어폭스가 자주 죽는 현상 개선

참고 글 : http://kldp.org/node/107108
조아라에서 소설 볼 때 10~15 분 마다 파이어폭스가 죽는 문제가 있어 알아 본 방법입니다.
우분투에선 (xubuntu 9.04 32 비트 시스템에서 작업했습니다.)

flashplugin-installer, nspluginwrapper 설치 ( flashplugin-nonfree 와 어도브 제공 deb 파일은 제거했습니다.)

sudo apt-get install flashplugin-installer nspluginwrapper

제대로 설치가 되면 firefox 를 실행시켜서 주소표시줄에 about:plugins 를 입력한 뒤에 나온 페이지의
"Shockwave Flash" 항목에
파일명: npwrapper.libflashplayer.so
Shockwave Flash 10.0 r32
처럼 나옵니다.

/usr/lib/nspluginwrapper/noarch/npviewer 에 아래 내용 삽입

[code:2ng7qcwx]
if test -n "$2"; then
if test "${2%libflashplayer.so}" != "$2"; then
if test -n "$LD_PRELOAD"; then
LD_PRELOAD="$LD_PRELOAD:$NPW_VIEWER_DIR/libftmgrwrapper.so"
else
LD_PRELOAD="$NPW_VIEWER_DIR/libftmgrwrapper.so"
fi
export LD_PRELOAD
fi
fi
[/code:2ng7qcwx]

kldp bushi 님의 flash_wrap2.tgz [attachment=0:2ng7qcwx]flash_wrap2.tgz[/attachment:2ng7qcwx]파일을 다운 받아
압축 푼뒤 그 디렉토리 터미널에서 make

make 로 만들어진 libftmgrwrapper.so 파일을 /usr/lib/nspluginwrapper/i386/linux/ 로 복사합니다.

sudo copy libftmgrwrapper.so /usr/lib/nspluginwrapper/i386/linux/

이러면 리눅스 플래시 폰트 로딩 메노리 누수 현상 개선됩니다.
(이게 정확한 건지 모르지만 조아라 소설 볼 때 10~15 분 마다 파이어폭스가 죽지 않는단 걸 뜻합니다.)
ps ax|grep npviewer.bin 으로 PID 알아낸 뒤
pmap PID | grep ttf | wc -l
해보면 폰트가 3 개 정도 뜹니다.( 처음에는 0 개가 뜨는 줄 알았습니다만 제가 PID를 잘 못 넣은 거였습니다.)

그리고
ps ax|grep firefox 으로 피이어폭스 관련 PID 찾고
pmap pidof firefox|grep ttf | wc -l
로는 10개 정도 뜹니다.

pmap pidof firefox|grep ttf
으로 firefox-3.5에서 폰트를 다 획인해 본 결과 중복없이 나타난 걸 볼 수 있습니다.
아마 firefox 에서도 마찬가지일 겁니다.

ps.
방금 조아라에서 오랜 시간 (약 2시간 30 분 정도) 지나니 파이어폭스가 안 죽는 대신 시스템이 얼어붙어
시스템 응급 처치(알트+시스템레스큐 키를 누른 상태에서 R-E-I-S-U-B) 으로 강제 재부팅을 하였는데,
벌써 댓글이 달려 있네요.

제목을 ‘조아라에서 소설 볼 때 파이어폭스가 자주 죽는 현상 개선’ 으로 바꾸겠습니다.
다만 위에도 썼듯이 파이어폭스가 10분마다 죽는 현상은 없어지지만 반면에 오랜시간이 흐른 후에 시스템이 어는 현상이 있습니다.

ps.2
오타때문에 본문 글이건 댓글이건 몇 번을 고쳤는지 모릅니다.
특히 pmap 을 pidmap 이라고 잘 못 써 넣은 경우가 많았습니다. 복사/붙여넣기를 해도 계속 실수하네요.

글쎄요.
bush님이 애써 만든 so파일의 유효성과 상관없이
나타난 현상만으론 nspluginwrapper 가 so파일을 preloading못한거 아닌가요?

bush님의 so 파일을 로딩했다면
플래시 테스트 사이트에 가서

pmap pidof npviewer.bin|grep ttf

했을때 적어도 몇개의 ttf 파일은 있어야죠.
2000여개 3000 개로 증가해가는 메모리 사용량이 해결됐더라도 말입니다.

0으로 나온다는 건 nspluginwrapper 이 so파일을 preloading못한겁니다.

pmap pidof npviewer.bin|grep ttf 말고 pmap pidof firefox-bin|grep ttf|wc -l 해보면
메모리 누수는 여전한걸 알수 있습니다.

pmap pidof firefox-bin|grep ttf|wc -l
1995
pmap pidof firefox-bin|grep ttf|wc -l
2099
pmap pidof firefox-bin|grep ttf|wc -l
2108

/usr/lib/nspluginwrapper/noarch/npviewer.sh
파일에 삽입된 ldpreload관련 설정이 뭔가 문제가 있지 싶습니다.

$ nspluginwrapper -l
/home/reandr/.mozilla/plugins/npwrapper.libflashplayer.so
Original plugin: /home/reandr/.mozilla/plugins/libflashplayer.so
Plugin viewer: /usr/lib/nspluginwrapper/i386/linux/npviewer
Wrapper version string: 1.3.1-Pre (20090903)

등록을 해제하고 다시 등록시켜보면
$ nspluginwrapper -v -r /home/s4ndy/.mozilla/plugins/npwrapper.libflashplayer.so
Remove plugin /home/s4ndy/.mozilla/plugins/npwrapper.libflashplayer.so

$ nspluginwrapper -v -i /home/reandr/.mozilla/plugins/libflashplayer.so
/usr/lib/nspluginwrapper/noarch/npviewer.sh: line 138: syntax error near unexpected token then' /usr/lib/nspluginwrapper/noarch/npviewer.sh: line 138: if test "${2%libflashplayer.so}" != "$2"; then’
/usr/lib/nspluginwrapper/noarch/npviewer.sh: line 138: syntax error near unexpected token then' /usr/lib/nspluginwrapper/noarch/npviewer.sh: line 138: if test "${2%libflashplayer.so}" != "$2"; then’
nspluginwrapper: no appropriate viewer found for /home/reandr/.mozilla/plugins/libflashplayer.so

뭔가 문제가 있는걸 볼수 있죠

또 직접 LD_PRELOAD=pwd/libftmgrwrapper.so firefox
를 사용 하는 경우도 3.0 버젼에서만 작동하고 3.5 나 3.6 또는 3.7 버젼에선 아예 segfault 나버리네요

그나마 3,0 버젼에서 테스트해도
누수는 해결되지 않는듯 보입니다.

a76cd000 60K r---- /usr/share/fonts/VeraBd.ttf
a76dc000 60K r---- /usr/share/fonts/VeraBd.ttf
a76eb000 60K r---- /usr/share/fonts/VeraBd.ttf
a76fa000 60K r---- /usr/share/fonts/VeraBd.ttf
a7709000 60K r---- /usr/share/fonts/VeraBd.ttf
a7718000 60K r---- /usr/share/fonts/VeraBd.ttf
a7727000 60K r---- /usr/share/fonts/VeraBd.ttf
a7736000 60K r---- /usr/share/fonts/VeraBd.ttf
a7745000 60K r---- /usr/share/fonts/VeraBd.ttf
a7754000 60K r---- /usr/share/fonts/VeraBd.ttf
a7763000 60K r---- /usr/share/fonts/VeraBd.ttf
a7772000 60K r---- /usr/share/fonts/VeraBd.ttf
a7781000 60K r---- /usr/share/fonts/VeraBd.ttf
a7790000 60K r---- /usr/share/fonts/VeraBd.ttf
a779f000 60K r---- /usr/share/fonts/VeraBd.ttf
a77ae000 60K r---- /usr/share/fonts/VeraBd.ttf
a77bd000 60K r---- /usr/share/fonts/VeraBd.ttf
a77cc000 60K r---- /usr/share/fonts/VeraBd.ttf
a77db000 60K r---- /usr/share/fonts/VeraBd.ttf
a77ea000 60K r---- /usr/share/fonts/VeraBd.ttf
a77f9000 60K r---- /usr/share/fonts/VeraBd.ttf
aa1a9000 60K r---- /usr/share/fonts/VeraBd.ttf
aa1b8000 60K r---- /usr/share/fonts/VeraBd.ttf
aa1c7000 60K r---- /usr/share/fonts/VeraBd.ttf
aa6a0000 60K r---- /usr/share/fonts/VeraBd.ttf
aa6af000 60K r---- /usr/share/fonts/VeraBd.ttf
aa6be000 60K r---- /usr/share/fonts/VeraBd.ttf
aa6cd000 14536K r---- /usr/share/fonts/msyh.ttf
abe0b000 2208K r---- /usr/share/fonts/truetype/nanum/NanumGothicBold.ttf
b272b000 2276K r---- /usr/share/fonts/truetype/nanum/NanumGothic.ttf
b45b6000 60K r---- /usr/share/fonts/VeraBd.ttf
/media/sdc1$ pmap pidof firefox|grep ttf|wc -l
2179

전 firefox 나 firefox-3.5 나 마찬가지로 전부다 pmap 으로 아무 것도 안 나옵니다.
pmap pidof firefox-bin|grep ttf|wc -l 이걸로 하면 0 이라는 숫자만 나오고요.

다만 audacious 로 음악 감상하면서 조아라 사이트의 소설을 2~3 시간 감상하다 보니 시스템이 어는 현상이 있는 걸 방금 발견해서 그 사항을 추가하고 제목 고치러 들어왔다가 댓글을 이제 발견했습니다.

근데 ttf 파일이 하나도 보이지 않는 건 어떤 문제인가요?
전 그냥 조아라 사이트가 당장은 죽지 않고 폰트파일들이 엄청나게 중복되어 나타나지 않아서 정상인 줄 알았습니다.

o으로 나올수가 없죠.
우리가 웹에서 보는 모든게 영어 폰트 한글 폰트 들인데
가장 기본적인것들만 메모리에 올라있더라도
10개 내외라야 정상입니다.

우분투에서 배포한 firefox에선 firefox를 찾아야죠.

pmap pidof firefox|grep ttf|wc -l

바이너리 버젼 firefox 들은 firefox-bin을 찾아야하고요.

pmap pidof firefox-bin|grep ttf|wc -l

0으로 나온다고 정상인게 아니란 말씀입니다.
10개 내외가 정상이고 메모리 누수 때는 2000개 3000 개 로딩된 불필요하게
중복된 폰트들이 계속 늘어나죠.
시스템 메모리가 소진돼서 얼때까지.

0 으로 나오면 안되는 거였나요?

하긴 저 설정을 적용하기 전에 빈 페이지에선 폰트가 2개, kldp 사이트에선 폰트가 6개, 조아라 사이트나 다른 플래시 사이트에선 폰트가 셀 수도 없이 중복되어 나타나더군요.

그런데 희한한 건 저 설정을 적용하고 부터 조아라에서 소설 보기가 편해졌고, 네이버 지하철 노선도가 보인다는 겁니다.
그 전엔 네이버 지하철 노선도는 아예 뜨지도 않고 파이어폭스가 그냥 얼어 버렸거든요.

혹시 bushi 님의 방법으로 리눅스용 플래시 플레이어 폰트 로딩 메노리 누수는 해결 되었지만, 파이어폭스의 자체 메모리 버그로 인해 오랜시간 파이어폭스를 띄워 놓으면 문제가 생기는 건 아닌지 의심스럽습니다.

저는 조금 다르게 봅니다.
bush님의 so 파일이 옳은 분석아래 잘만들어졌지만
특정한 firefox버젼 하나만을 두고 테스트된듯보이고
nspluginwrapper 에 대한 적용은 뭔가 sh 설정 파일에 오류가
있어서 올바른 분석이지만 그 분석의 적용이 아직 제대로가
아닌듯해 보입니다.

즉 누수문제는 여전히 그대로라는 거죠.

조아라 사이트나 다른 플래시 사이트 접근성이
좋아진건 adblock plus 설정과 관련이 있지 않을까요?

nspluginwrapper 를 지우고 adblock plus 설정을 예전으로 돌리고
다시 조아라 가보세요
그후 adblock plus 설정을 바꾸고 테스트 해보세요.

부시님의 파일은 적어도 지금의 nspluginwrapper 설정에서는 별 효과 없어 보입니다.

ps ax|grep firefox 으로 PID 찾고

pmap pidof firefox|grep ttf|wc -l
이걸로 하니 10개 제대로 나오네요.

pmap pidof firefox|grep ttf
으로 firefox-3.5에서 폰트가 중복없이 10개가 다 제 각각인 것 확인했습니다.

이러면 정상이란 거죠? 다행입니다. 그런데 왜 오랜시간이 지나면 시스템이 어는지 모르겠네요.

역시 플래시플레이어의 폰트로딩 관련 버그는 수정 되었지만 리눅스 파이어폭스의 다른 버그로 인해 그럴 가능성이 높은 것 같습니다.

조아라 같은 경우도 실제 글보는 플래시 화면에 들어가서
pmap pidof firefox |grep ttf|wc -l

을 한번만 치지말고 한 50초 간격으로 계속 한 5분간 쳐보세요.
10 13 15 17 19 30 35 …계속 늘어날겁니다.아니면 top명령으로 실시간으로 메모리 증가를 지켜보는것도
좋겠죠. 계속 늘어나서 결국 얼어붙는다는.
메모리 누수는 해결된게 아닙니다.

제가 pmap pidof npviewer.bin|grep ttf 에 아무런 결과가 없다고 했는데, 그건 제 실수였습니다.
다시 pmap pidof npviewer.bin|grep ttf|wc -l 해보니 3개가 나오더군요.
ps ax|grep npviewer 에서 PID 를 알아내고도 잘못된 값을 집어넣은 거였습니다.

하지만 pmap pidof firefox|grep ttf|wc -l 을 지금까지 계속 테스트 해 봤습니다만 폰트가 10개를 쭉 유지하고 있습니다.

[code:wjc290uv]
abcd@ubuntu:~$ ps ax|grep firefox
3290 ? Sl 8:00 /usr/lib/firefox-3.5.2/firefox-3.5
6316 pts/0 S+ 0:00 grep firefox
abcd@ubuntu:~$ pmap 3290 |grep ttf|wc -l
10
abcd@ubuntu:~$ pmap 3290 |grep ttf
aabd4000 140K r---- /usr/local/share/fonts/userfonts/verdana.ttf
abcba000 280K r---- /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
ac1d8000 1100K r---- /usr/local/share/fonts/userfonts/Lucida Grande Bold.ttf
ac2eb000 1104K r---- /usr/local/share/fonts/userfonts/Lucida Grande.ttf
ae6ab000 136K r---- /usr/local/share/fonts/userfonts/verdanab.ttf
ae6cd000 2744K r---- /usr/share/fonts/truetype/unfonts/UnDotumBold.ttf
ae97b000 3596K r---- /usr/share/fonts/truetype/unfonts/UnBatang.ttf
afe13000 296K r---- /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
b1cb3000 272K r---- /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
b3ee4000 2160K r---- /usr/share/fonts/truetype/unfonts/UnDotum.ttf
abcdflashflashf@ubuntu:~$
[/code:wjc290uv]

따라서 시스템이 어는 건 리눅스 플래시 플러그인의 폰트로딩과 관련된 문제는 아니고 다른 문제 같습니다.

로케일 en-us.UTF8 을 사용하면 해당 버그가 발생하지 않는건가요?

[code:2o4c64r4]while true; do T=$[ $T + 2 ];A=$(pmap pidof firefox | grep -i ttf) ;echo $[$T/60] 분 $[$T%60 ] 초 경과 ; echo "----------------" ;echo "$A" ; echo "----------------"; echo "TTF 파일 숫자 " ;echo "$A" | wc -l ;echo "----------------"; sleep 2; done[/code:2o4c64r4]

로 해보았는데…

[code:2o4c64r4]9 분 22 초 경과

96d36000 7976K r---- /usr/share/fonts/kochi-substitute/kochi-gothic-subst.ttf
9d2db000 3572K r---- /usr/share/fonts/unfonts-extra/UnDotum.ttf
b280e000 152K r---- /usr/share/fonts/corefonts/verdanai.ttf
b2a12000 140K r---- /usr/share/fonts/corefonts/verdana.ttf
b2a35000 272K r---- /usr/share/fonts/corefonts/arial.ttf
b2abc000 272K r---- /usr/share/fonts/corefonts/arial.ttf
b300f000 296K r---- /usr/share/fonts/corefonts/cour.ttf
b3059000 124K r---- /usr/share/fonts/corefonts/trebuc.ttf
b3078000 68K r---- /usr/share/fonts/ttf-bitstream-vera/Vera.ttf
b3089000 68K r---- /usr/share/fonts/ttf-bitstream-vera/Vera.ttf
b3208000 68K r---- /usr/share/fonts/ttf-bitstream-vera/Vera.ttf
b3219000 68K r---- /usr/share/fonts/ttf-bitstream-vera/Vera.ttf
b322a000 68K r---- /usr/share/fonts/ttf-bitstream-vera/Vera.ttf
b323f000 136K r---- /usr/share/fonts/corefonts/verdanab.ttf
b3605000 68K r---- /usr/share/fonts/ttf-bitstream-vera/Vera.ttf

TTF 파일 숫자
15

[/code:2o4c64r4]
이정도 나오는데…
firefox 3.5.2 이며 위에서 위에서 이야기되는 패치등 을 하지 않았습니다…
환경은 gentoo… 이고요…

조아라는 처음 가보았는데… 소설 두개 를 탭으로 뛰어 논 상태였습니다… 그외 다른 사이트 탭으로… 4 개정도…

예.

처음에 kldp 에서 이 문제를 발견하신 분이 영어나 일어 환경에선 무한 로딩되지 않지만
ko_KR.UTF-8 환경에서 폰트들이 중복되어 무한 로딩된다고 말씀하시며 메모리 누수가 일어난다고 하셨습니다.

그 후에 bushi 님이 메모리 누수라기 보단 폰트가 무한 로딩되어 메모리 번지수가 모자라 일어나는 현상이라고 분석하고 패치 파일을 만들었습니다.

메모리 번지수가 뭔지는 몰라도 제 생각엔 bushi 님의 의견이 맞는 것 같습니다.
그러니까 조아라에서 소설을 2~3 시간씩 오래 볼 때시스템이 어는 건 폰트 무한 로딩 때문이 아니라 리눅스 플래시플레이어나 파이어폭스의 다른 버그 때문일 가능성이 큽니다.

ps.
처음 kldp 에서 글타래를 여신 분이 영어나 일어 환경에서 폰트가 무한 로딩 되지 않는다고 말씀 하셨고,
블루툭스 님의 상황을 봐도 무한 로딩 되지는 않았지만 다시 자세히 보니 중복된 폰트들이 있네요.

어쨌건 폰트들이 중복되어 나타나는 것이 좋아 보이진 않습니다.

[quote="pamisu1":3menu3fe]예.

처음에 kldp 에서 이 문제를 발견하신 분이 영어나 일어 환경에선 무한 로딩되지 않지만
ko_KR.UTF-8 환경에서 폰트들이 중복되어 무한 로딩된다고 말씀하시며 메모리 누수가 일어난다고 하셨습니다.

그 후에 bushi 님이 메모리 누수라기 보단 폰트가 무한 로딩되어 메모리 번지수가 모자라 일어나는 현상이라고 분석하고 패치 파일을 만들었습니다.

메모리 번지수가 뭔지는 몰라도 제 생각엔 bushi 님의 의견이 맞는 것 같습니다.
그러니까 조아라에서 소설을 2~3 시간씩 오래 볼 때시스템이 어는 건 폰트 무한 로딩 때문이 아니라 리눅스 플래시플레이어나 파이어폭스의 다른 버그 때문일 가능성이 큽니다.

ps.
처음 kldp 에서 글타래를 여신 분이 영어나 일어 환경에서 폰트가 무한 로딩 되지 않는다고 말씀 하셨고,
블루툭스 님의 상황을 봐도 무한 로딩 되지는 않았지만 다시 자세히 보니 중복된 폰트들이 있네요.

어쨌건 폰트들이 중복되어 나타나는 것이 좋아 보이진 않습니다.[/quote:3menu3fe]

네 약간의 중복이 생기더라구요… 평상시는 7 개를 유지합니다…
그리고 조아라… 페이지등 열고… 한시간 정도 지나도… 저 위의 상태를 유지하더라구요…