서버프로세스 종료

익명 사용자의 이미지

안녕하세요.

간단한 서버/클라이언트 프로그램을 개발중인데요.
클라이언트를 기다리는 동안에는 서버가 죽지는 않고 있는데요.
만약 몇시간동안 클라이언트 접속이 없다가
클라이언트가 접속이 있으면 서버가 그냥 죽어버리는 오류가 있어요.
공백인 시간이 10시간 이하로는 이런 현상이 없는 것 같은데
그 이상이 되면 데게 죽어버립니다.

예측되는 원인을 좀 알려주시면 좋겠습니다. 조언부탁드립니다.

환경
Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.19-6.2.12enterprise on a 2-processor i686
클라이언트는 퀄컴의 BREW 기반으로 짜여진겁니다.

익명 사용자의 이미지

정보가 너무 부족하네요..

죽는 것의 대부분은 세그멘테이션 폴트인데요

이것을 잡는 방법은 gdb상에서 실행을 하시면
세그멘테이션 폴트나는 소스상의 위치를 잡아 낼 수 있습니다.
아니면 생성된 코어덤프 파일을 gdb로 분석하는 방법도 있구요./

gdb같은 툴이 없으면 이것처럼 긴텀을 두고 죽는 이유를 잡아내기
힘들껍니다...
이참에 gdb사용법을 배워보시는 것이..

http//www.ezdoum.com/search.php?query=gdb

익명 사용자의 이미지

친절한 답변 감사합니다.
조언해주신대로 gdb을 익힌후 디버깅 해보기엔 지금 시간이 촉박해서..
어찌해야할지 모르겠네요. 그래도 배우긴 배워야겠단 생각이 듭니다.
저런 디버깅 툴을 몰라서 막막했거든요 ㅡㅡ;;
일단 printf 를 남용(?)해서 어디서 죽는지 정확히 알아본 후 다시 질문
올리겠습니다.
고맙습니다.

익명 사용자의 이미지

core를 살펴봤더니.. 정상적으로 printf한 바로 다음에 다음과 같은 내용
이 있어요.
-------------------------------------------------------------------
ode 2
ause target host or object does not exist
Oracle Bequeath NT Protocol Adapter for Linux Version
8.1.6.0.0 - Production
TCP/IP NT Protocol Adapter for Linux Version 8.1.6.0.0 -
Production
CT_DATA=(CID=(PROGRAM=)(HOST=xxx.net)(USER=sorrel))))
-------------------------------------------------------------------

제가 짠 서버가 쓰레드 방식을 쓰고있고 오라클을 연결해서 작업을 하는
데..
오라클연결은 첨 서버가 구동할 때 한번만 연결하도록 해놨거든요.
아무래도 오라클 연결이 idletime이 길어져서 끊어진 것 같아요.
이 원인이 확실할 경우 어떻게 수정을 해주면 좋을지 조언 구합니다.

클라이언트 접속이 있을 때마다 쓰레드에서 각각 오라클 연결을 하는 것
이 좋을지 ..
아니면 오라클 연결이 끊어진지를 검사해서 다시 연결하는것이 맞는지..
(연결이 끊어진지 여부를 검사하는 방식이 있나요?)
커넥션 풀을 쓰면 된다는 말을 들은 것 같은데.. 제가 그건 어떻게 하는
지 모르고 ㅡㅡ;;

고수님들은 어떤 방식을 쓰시는지 궁금합니다. 답변 부탁해요.

익명 사용자의 이미지

sql 문장들을 수행하면 sqlca.sqlcode(sqlca.sqlerrd[])에 오류가 return
됩니다.이 오류에 따라서 적당한 처리를 하시면 될 듯 합니다.
(whenever error 구문도 점검 하세요. 만약 function을 지정 했다면 약간
의 수고가 필요 합니다.)

만약 오류가 database disconnect라면 database에 다시 connect를 하면 됩
니다.
그리고 이와 같이 오랜 시간동안 db를 쓰지 않는다면 database를
disconnect 하시기를 권합니다. 10시간동안 쓰지않는데 DB를 연결 하고 있
다는 건 낭비가 심한 듯 합니다.

disconect는 exec sql commit work releas;
를 하면 commit 과 동시에 database connection을 close합니다.

익명 사용자의 이미지

우선 답변 감사합니다.

이 서비스의 경우 사용자가 언제 접속할지 알 수 없기 때문에 오라클을 그
냥 연결을 해놨습니다.

만약 얼마만에 한번씩 사용자가 접속할 경우 오라클을 계속 연결해두는 것
이 효율적인지 궁금합니다. 답변해주신 분께서는 매번 오라클을 다시 연결
해서 쓰시는지요? 한번 더 답변 부탁해요~

익명 사용자의 이미지

제가 드린 애기는 장시간 사용을 하지 않을때 끊으라는 애기입니다.
즉 일정시간안에 (예 5분) 접속이 없으면 database연결을 disconnect
하고 다시 접속이 되면 db를 connect하면 되니까요.

마지막 접속으로부터 n의 시간동안 아무일이 일어나지 않으면
앞으로도 접속이 발생할 가능성이 적다는 이야기일 수 있습니다.
인간의 활동시간을 기준으로 삼으면 9시부터 8시까지는 접속 빈도가
높을테고 8시 이후 점차 작아지다 12이후가 되면 거의 접속이 없을텐데
이런 시간에도 db를 물고 있는것은 어딘지 불 합리적일 수 있다는
이야기였습니다.

이런 구조를 가지면 사용할수록 db접속을 유지 하는 시간은 길어지고
사용이 안되면 db접속은 짧아지겠죠.

그리고 DB처리시 오류는 확인을 해 보셨는지 모르겠습니다.
TEST방법은 간단하게 현제의 oracle exec(oracle[DBMSNAME])을 찾으셔서
프로세스를 kill한후 접속을 시도 해보면 쉽게 결과를 알 수 있을겁니다.
매일 죽을때까지 기다리는 일은 너무 지루한 작업이 될테니까요..
그리고 제가 설치한 oracle은 24시간을 사용하지 않아도 disconnect가
되지 않습니다. 아마 oracle 관리자가 따로 설정을 한듯 싶네요.
만약 그렇지않다면 프로그램상의 심각한 오류가 있다는 애기이니
참고하시기 바랍니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.